shell_条件判断

  • sort
  1. -n:按数字排序,默认是按照字符串排序.
  2. -r:reverse反排序
  3. -k a,b:排序的范围,第ab
  4. -t ":":修改分隔符,例如:
    cp /etc/passwd /tmp/sh
    sort -n -k 3,4 -t ":" student | awk 'BEGIN{FS=":"}{print $3 "\t" $4}'
    sort -n -r -k 3,4 -t ":" student | awk 'BEGIN{FS=":"}{print $3 "\t" $4}'

回顾: $?:代表上一条命令是否执行正确
echo $?
或者用逻辑表达
[ -f /root ] && echo yes || echo no

条件判断

  • 判断的2组格式
    1. test -e /root/install.log

    2. [ -e /root/install.log ]

  • 文件类型判断(常用选项)
-e 文件存在为真
-f 文件存在且为普通文件则真
-d 文件存在且为目录则真
  1. test -e /root/install.log
  2. [ -e /root/install.log ]
  • 文件权限(任意用户有权限都算)
-r read
-w write
-x execute
  1. test -w /root/install.log
  2. [ -r /root/install.log ]

ZIBfeK.jpg

  • hard link
    • 硬链接是仅文件名字不同但是inode号相同的文件
    1. 硬链接和原file有相同的inodedate block
    2. 不能对目录建立
    3. 不能再交叉文件系统建立硬链接,因为inode在不同文件系统不一样
    4. 删除一个硬链接不影响相同inode文件
  • soft link
    • 拥有自己的inodeblock,存放的是指向文件的路径,类比于windows的快捷方式
    1. 可以对目录创建
    2. 不存在文件和目录也可以创建
    3. 可以在交叉的文件系统创建
  • 文件时间比较
file1 -nt file2 new time 修改时间是否新
file1 -ot file2 old time
file1 -ef file2 equal file,判断文件inode是否相同,即是否为同一文件

test /etc/passwd -nt /tmp/temp && echo 1 || echo 2

[ /etc/passwd -nt /tmp/temp ] ; echo $?

  • 整数之间的比较
eq equal 相等
ne not equal 不相等
gt greater than 大于
ge greater equal 大于等于
it lower than 小于
ie lower equal 小于等于

test 1 -eq 2 && echo yes || echo no

[ 1 -eq 2] ; echo $?

  • 字符串之间的比较
-z 为空则真
-n 非空则真
!= 相等
== 不相等

test -z "string" && echo yes || echo no

[ -z "string" ] ; echo $?

  • 逻辑判断
-a and [ -z "" -a -z "addd"] ; echo $?
-o or [ -z "" -o -z "dd" ] ; echo $?
! [ ! -z "ad" ] ; echo $?

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!