8244 发表于 2018-8-16 12:58:38

Shell一些例子

1、算术运算比较运算符(bash自身不能比较浮点数)  -eq 等于          [ $num1 -eq $num2 ]
  -ne 不等于       [ 100   -ne $num1 ]
  -lt 小于         [ 100   -lt `expr $num1 + $num2` ]
  -le 小于或等于   [ 100   -le `expr $num1 \* $num2` ]
  -gt 大于         [ 100   -gt `expr $num1 / $num2` ]
  -ge 大于或等于   [ 100   -ge `expr $num1 % $num2` ]
  2、字符串比较运算符
  -z string如果 string 长度为零,则为真[ -z "`ps aux | grep mysql`" ]
  -n string如果 string 长度非零,则为真[ -n "$string" ]
  【注意】 $string 一定要放在双引号里面 "$string",否则使用 -n -z 的结果都为真!
  string1 != string2如果 string1 与 string2 不同,则为真[ "$str1" != "Snail" ]
  string1 == string2如果 string1 与 string2 相同,则为真[ "$str1" == "$str2" ]
  (上面用一个 = 也可以,在严格的 POSIX 兼容下使用)
  string1string2   如果 string1 按字典顺序比较大于 string2,则为真
  3、文件比较运算符
  -a filename如果 filename 存在,则为真                   [ -e $HOME/.bashrc ]
  -e filename(同上)
  -b filename如果 filename 存在,并且是块文件,则为真   [ -e /dev/loop0 ]
  -c filename如果 filename 存在,并且是字符文件,则为真   [ -e /dev/ttyS0 ]
  -d filename如果 filename 存在,并且为目录,则为真       [ -d /home/snail ]
  -f filename如果 filename 存在,并且为常规文件,则为真   [ -f /dev/ttyS0 ]
  -g filename如果 filename 存在,并且为set-group-id,为真 [ -f $HOME/ak47 ]
  -h filename如果 filename 存在,并且为符号连接,则为真   [ -h /bin/vi ]
  -L filename(同上)
  -k filename如果 filename 存在,并且设置了sticky位,为真 [ -k /bin/ping ]
  -p filename如果 filename 存在,并且为有名管道(FIFO),真 [ -p /tmp/pipe ]
  -r filename如果 filename 存在,并且可读,则为真         [ -r /etc/passwd ]
  -s filename如果 filename 存在,并且大小不为零,为真   [ -s ./none-zero ]
  -u filename如果 filename 存在,并且为set-user-id,为真[ -f $HOME/ak47 ]
  -w filename如果 filename 存在,并且可写,则为真         [ -w /var/log/mail ]
  -x filename如果 filename 存在,并且可执行,则为真       [ -x ./start.sh ]
  下面这些不常用的:
  -t fd      如果文件描述符被打开并指向一个终端,则为真   [ -t /proc/1/fd/10 ]
  【提示】在 /proc/进程号/fd 下可以找到文件描述符:)
  -O filename如果 filename 存在,并且被有效用户ID所拥有,则为真
  -G filename如果 filename 存在,并且被有效组ID所拥有,则为真
  -S filename如果 filename 存在,并且为一个socket,则为真 [ -S /tmp/mysql.sock ]
  -N filename如果 filename 存在,并且在上次读取后被修改过,则为真
  -o optname   如果 shell 选项 optname 被开启,则为真
  【提示】使用 set -o 来查看
  file1 -nt file2如果 file1 比 file2 新,或者 file1 存在 file2 不存在,则为真
  file1 -ot file2如果 file1 比 file2 旧,或者 file2 存在 file1 不存在,则为真
  file1 -ef file2如果 file1 和 file2 都指向同样的设备(device)和索引节点号(inode numbers),则为真
  【提示】查看文件的索引节点可以用 ls -i 选项

页: [1]
查看完整版本: Shell一些例子