Skip to content

shell ​


跟新于 2022-01-08

变量 ​

条件变量 ​

特殊变量 ​

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

if ​

基本语法: ​

shell
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 INT2INT1和INT2两数相等为真
INT1 -ne INT2INT1和INT2两数不等为真
INT1 -gt INT2INT1大于INT1为真
INT1 -ge INT2INT1大于等于INT2为真
INT1 -lt INT2INT1小于INT2为真
INT1 -le INT2INT1小于等于INT2为真

复杂逻辑判断 ​

符号含义
-a逻辑与
-o逻辑或
!逻辑非
shell
#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 ​

shell
case value in
value1)
    command
    ...
    ;;
value2)
    command1
    ...
    ;;
esac