跳转至

shell


跟新于 2022-01-08

变量

条件变量

特殊变量

参数 说明
$0 shell本身文件名
$? 最后运行命令的返回值
$! shell最后运行的后台process的PID
$$ shell本身的pid
$# shell的参数个数
$@ 所有参数列表,以"$1 $2 … $n"的形式输出所有参数,此选项参数可超过9个
$* 所有参数列表,以"\(1" "\)2" … "$n" 的形式输出所有参数

if

基本语法:

Bash
1
2
3
4
5
6
7
if [ command ];then
   cmd
elif [ command ];then
  cmd
else
   cmd
fi

判断文件/文件夹(目录)

判断 说明
[ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真
[ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真
[ -d DIR ] 如果 FILE 存在且是一个目录则为真
[ -e FILE ] 如果 FILE 存在则为真
[ -f FILE ] 如果 FILE 存在且是一个普通文件则为真
[ -g FILE ] 如果 FILE 存在且已经设置了SGID则为真
[ -k FILE ] 如果 FILE 存在且已经设置了粘制位则为真
[ -p FILE ] 如果 FILE 存在且是一个名字管道(F如果O)则为真
[ -r FILE ] 如果 FILE 存在且是可读的则为真
[ -s FILE ] 如果 FILE 存在且大小不为0则为真
[ -t FD ] 如果文件描述符 FD 打开且指向一个终端则为真
[ -u FILE ] 如果 FILE 存在且设置了SUID (set user ID)则为真
[ -w FILE ] 如果 FILE存在且是可写的则为真
[ -x FILE ] 如果 FILE 存在且是可执行的则为真
[ -O FILE ] 如果 FILE 存在且属有效用户ID则为真
[ -G FILE ] 如果 FILE 存在且属有效用户组则为真
[ -L FILE ] 如果 FILE 存在且是一个符号连接则为真
[ -N FILE ] 如果 FILE 存在且最后一次读取之后未被修改则为真
[ -S FILE ] 如果 FILE 存在且是一个套接字则为真
[ FILE1 -nt FILE2 ] 如果FILE1比FILE2新,或FILE1存在而FILE2不存在则为真
[ FILE1 -ot FILE2 ] 如果FILE2比FILE1新,或FILE2存在且FILE1不存在则为真
[ FILE1 -ef FILE2 ] 如果FILE1和FILE2 指向相同的设备和节点号则为真

判断字符串

判断 说明
[ -z STRING ] 如果STRING的长度为零则为真
[ -n STRING ] 如果STRING的长度非零则为真
[ STRING1 = STRING2 ] 如果两个字符串相同则为真
[ STRING1 != STRING2 ] 如果字符串不相同则为真
[ STRING1 ] 如果字符串不为空则为真

数值判断

判断 说明
INT1 -eq INT2 INT1和INT2两数相等为真
INT1 -ne INT2 INT1和INT2两数不等为真
INT1 -gt INT2 INT1大于INT1为真
INT1 -ge INT2 INT1大于等于INT2为真
INT1 -lt INT2 INT1小于INT2为真
INT1 -le INT2 INT1小于等于INT2为真

复杂逻辑判断

符号 含义
-a 逻辑与
-o 逻辑或
! 逻辑非
Bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#exp1: 如果a>b且a
if (( a > b )) && (( a < c ))
#或者
if [[ $a > $b ]] && [[ $a < $c ]]
#或者
if [ $a -gt $b -a $a -lt $c ]

#exp2:如果a>b或a
if (( a > b )) || (( a < c ))
#或者
if [[ $a > $b ]] || [[ $a < $c ]]
#或者
if [ $a -gt $b -o $a -lt $c ]

case

Bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
case value in
value1)
    command
    ...
    ;;
value2)
    command1
    ...
    ;;
esac