# 1.判斷語法
a)? test 條件表達式
b)? \[ 條件表達式 \]
c)? \[\[ 條件表達式 \]\] ???????可匹配正則 =~
d)? 判斷后執行多個命令
```
[ 條件1 ] && {
命令1
命令2
}
```
# 2.文件類型判斷
~~~
-e 是否存在 不管是文件還是目錄,只要存在,條件就成立
-f 是否為普通文件
-d 是否為目錄
-S socket
-p pipe
-c character
-b block
-L 軟link
~~~
# 3.文件內容判斷
```
\-s 是否為非空文件
! -s 表示空文件
```
# 4.文件權限判斷
~~~
-r 當前用戶對其是否可讀
-w 當前用戶對其是否可寫
-x 當前用戶對其是否可執行
-u 是否有suid
-g 是否sgid
-k 是否有t位
~~~
# 5.兩個文件的比較判斷
~~~
file1 -nt file2 比較file1是否比file2新
file1 -ot file2 比較file1是否比file2舊
file1 -ef file2 比較是否為同一個文件,或者用于判斷硬連接,是否指向同一個inode
~~~
# 6.整數之間的判斷
~~~
-eq 相等
-ne 不等
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
~~~
# 7.字符串之間的判斷
~~~
-z 是否為空字符串 字符串長度為0,就成立
-n 是否為非空字符串 只要字符串非空,就是成立
string1 = string2 是否相等 --等號兩邊要有空格
string1 != string2 不等
! 結果取反
~~~
**注意**
**\[ "$1" = "abc" \]**?????**?--****判斷字符是否相等,變量也要用雙引號**
# 8.多重條件判斷
邏輯判斷符號:
\-a 和 && 邏輯與
只有兩個條件都成立,整個大條件才成立
\[ 1 -eq 1 \] && \[ 2 -ne 3 \]
\[ 1 -eq 1 -a 2 -ne 3 \]
\-o 和 || 邏輯或
只要其中一個條件成立,整個大條件就成立
\[ 1 -eq 1 -o 2 -ne 2 \]
\[ 1 -eq 1 \] || \[ 2 -ne 2 \]
**! 邏輯非 優先級****最低**
\-a 優先級 比 -o 優先級要高
\[\[\]\] 和(())中可以使用&& || 不能使用 -a -o

# 9.實例
\# \[**$(id -u)**\-eq 0 \] && echo "當前是超級用戶"??????????**?--id -u? username?****可以查看用戶****id**
$ \[ $UID -eq 0 \] && echo "當前是超級用戶" || echo "you不是超級用戶"
\# ((1**\==**2));echo $? ?????--C語言風格的數值比較
\# ((1>=2));echo $?
題目:輸入一個路徑,判斷路徑是否存在,而且輸出是文件還是目錄,如果是鏈接文件,還得輸出是有效的連接還是無效的連接
**思路:鏈接文件也屬于文件,所以先判斷鏈接文件,再去判斷是否為文件**
~~~
#!/bin/bash
read -p "Input your path:" path
if [ -e $path -a -L $path ];then
echo "$0 is link file"
elif [ ! -e $path ] && [ -L $path ];then
echo "$0 is not effctive link file"
elif [ -d $path ];then
echo "$0 is a dirctory"
elif [ -f $path ];then
echo " $0 is file"
else
echo "$0 is other file"
fi
~~~
**ls -L****?dir****?????????????????? -L****可以判斷軟鏈接**
**\--無效鏈接用-e判斷會不存在**
**\-L****如果遇到性質為符號鏈接的文件或目錄,直接列出該鏈接所指向的原始文件或目錄;**
- Linux
- linux常用命令
- awk
- cp
- scp
- mv
- screen工具
- rsync
- Linux設置靜態IP
- vim常用
- ssh免密登錄
- linux掛載磁盤和開機自動掛載
- 文件的時間戳
- 重定向
- 防火墻
- Vultr 服務器利用快照更換IP
- ss
- node-yarn
- ES安裝向導
- lnmp/lamp
- windows安裝mysql
- windows安裝nginx
- Let'sEncrypt 免費通配符/泛域名SSL證書
- 開機自動掛載硬盤
- 普通用戶提權
- ELK日志分析系統
- Docker
- docker
- centos7安裝docker
- Centos7安裝redis
- CentOS 7 使用Docker搭建Nginx
- CentOS 7 使用Docker搭建Jenkins
- CentOS 7 使用Docker搭建Zookeeper
- CentOS 7 使用Docker搭建Tomcat
- CentOS 7 使用Docker搭建Mysql
- CentOS 7 使用Docker搭建PHP環境
- 使用docker搭建Swagger
- docker阿里云私有倉庫
- docker zookeeper集群
- docker部署ES
- docker之java容器運行外置springboot-jar
- docker部署owncloud云盤
- ETCD
- centos7部署etcd節點
- Dockerfile
- Docker-compose
- gitlab.yml
- db.yml
- 安裝docker-compose
- gitlab-docker-compose.yml
- nginx-docker-compose.yml
- Mysql
- mysql開啟遠程訪問及相關權限控制
- mysql授權
- mysql快速導出導入大數據
- mysql單機備份
- binlog日志
- shell
- 經典案例
- 俄羅斯方塊游戲
- 系統初始化
- 服務器監控
- go基礎環境
- shell.監控日志.elk
- shell.檢查各服務腳本
- shell.刪除文件腳本
- shell.守護進程
- shell.數據庫
- shell.Ansible
- shell.dev
- shell.ftp環境
- shell.docker環境
- shell.k8s環境
- k8s.二進制安裝
- K8s.一主多從
- k8s.三主兩從高可用
- k8s.檢查服務與配置
- k8s.jenkins
- k8s.gitlab
- go-install.sh
- jenkins-install.sh
- node-install.sh
- redis-install.sh
- zabbix-install.sh
- zabbix-dockerfile.sh
- nginx-install.sh
- shell變量
- 用戶自定義變量
- 環境變量
- shell特殊變量
- shell條件判斷
- 流程控制
- shell運算符
- Shell _printf
- shell_test
- shell函數
- 輸出重定向
- 網絡相關
- 安全相關
- 堡壘機部署
- 區塊鏈威脅情報共享平臺
- 簽名與驗簽
- 淺談區塊鏈
- 智能合約
- 黃金幣GTF智能合約
- 節點
- 以太坊公鏈私鏈geth同步
- 比特節點同步
- BTC節點錯誤解決方法
- eth硬分叉
- omni錢包節點搭建
- 架構
- K8s
- 搭建k8s集群完整篇
- 二進制部署k8s
- Devops
- git
- Jenkins
- svn
- 禪道
- CI/CD
- docker+jenkins+golang持續集成持續交付(CI/CD)
- 項目部署
- config.env
- docker-compose.yml
- Dockerfile模板
- .dockerignore
- run.sh
- nginx.conf模板
- 跨域
- jenkins配置
- 測試
- Python