格式1:test 条件表达式
格式2:[条件表达式]
格式3:[[条件表达式]]
man test
[root@localhost ~]# test -d /home [root@localhost ~]# echo $? 0 [root@localhost ~]# [ -d /home ] [root@localhost ~]# echo $? 0 [root@localhost ~]# test -d /home111 [root@localhost ~]# echo $? 1
[root@localhost ~]# [ -d /home ];echo $? 0 [root@localhost ~]# [[ -d /home ]];echo $? #2个括号支持正则表达式 0 [root@localhost ~]# [[[ -d /home ]]];echo $? -bash: [[[: command not found 127
[ -e dir|file ]
[ -d dir ]
[ -f file ]
[ -r file ] 当前用户对该文件是否有读权限
[ -x file ]当前用户对该文件是否有执行权限
[root@localhost ~]# [ -e /home ];echo $? 0 [root@localhost ~]# [ -f /home ];echo $? 1 [root@localhost ~]# [ -f /etc/passwd ];echo $? 0 [root@localhost ~]# touch /file1 [root@localhost ~]# chmod u+x /file1 [root@localhost ~]# ll /file1 -rwxr--r-- 1 root root 0 Jan 4 14:32 /file1 [root@localhost ~]# [ -x file1 ];echo $? 1 [root@localhost ~]# su - wwb [wwb@localhost ~]$ [ -x /file1 ];echo $? 1 [wwb@localhost ~]$ [ -L /etc/passwd ]; echo $? 1 [wwb@localhost ~]$ [ ! -L /etc/passwd ]; echo $? 0
#!/usr/bin/env bash for ip in `cat $1` do ping -c1 $ip &>/dev/null if [ $? -eq 0 ]; then echo "$ip is up" else echo "$ip is down" fi done
不同的错误定义不同的返回值
[root@localhost ~]# cat ping03.sh #!/usr/bin/env bash if [ $# -eq 0 ];then echo "usage:`basename $0` file" exit 1 fi if [ ! -f $1 ];then echo "error please use file" exit 2 fi for ip in `cat $1` do ping -c1 $ip &>/dev/null if [ $? -eq 0 ];then echo "$ip:up" else echo "$ip:down" fi done
数值比较[ 整数1 操作符 整数2 ]
[ 1 -gt 10 ]:大于
[ 1 -lt 10 ] :小于
[ 1 -eq 10 ]:等于
[ 1 -ne 10 ]:不等于
[ 1 -ge 10 ]:大于等于
[ 1 -le 10 ]:小于等于
[root@localhost ~]# disk_use=`df -Ph | grep '/$'| awk '{print $5}' |awk -F'%' '{print $1}'` [root@localhost ~]# [ $disk_use -gt 60 ]&&echo "warning.." [root@localhost ~]# [ $disk_use -gt 30 ]&&echo "warning.." warning..
[root@localhost ~]# [ $uid -eq 0 ] && echo "The current user is the super user" || echo "The current user is not super user"
The current user is the super user
磁盘使用率
#!/usr/bin/env bash #disk use #v1.0 #disk_use=`df -Ph | grep /$ | awk '{print $5}'|awk -F'%' '{print $1}'` #disk_name=`df -Ph | grep /$ | awk '{print $6}'` IFS=$' ' #for默认空格最为换行改成回车作为换行 for line in `df -Ph|grep -v Size` do { disk_use=`echo $line|awk '{print $5}'|awk -F'%' '{print $1}'` disk_name=`echo $line| awk '{print $6}'` if [ $disk_use -gt 0 ];then echo "`date +%F` $disk_name: ${disk_use}%" fi } done
#!/usr/bin/env bash #mem use #v1.0 by wwb mem_total=`free -m | grep Mem | awk '{print $2}'` mem_used=`free -m | grep Mem | awk '{print $3}'` mem_per=$((mem_used*100/mem_total)) war_mem_file=/tmp/war_mem.txt if [ $mem_per -gt 80 ];then echo "`date +%F-%M` memory:${mem_per}%" |tee $war_mem_file fi if [ -f $war_mem_file ];then mail -s "mem warning" root <$war_mem_file rm -rf $war_mem_file fi
字符串比较
提示:使用双引号
[root@localhost ~]# [ "$USER" = "root" ];echo $? 0 [root@localhost ~]# [ "$USER" = "wwb" ];echo $? 1 [root@localhost ~]# [ "$USER" =~ ^ro ];echo $? -bash: [: =~: binary operator expected 2 [root@localhost ~]# [[ "$USER" =~ ^ro ]];echo $? 0
[root@localhost ~]# ./useradd.sh Please input number0k error number [root@localhost ~]# ./useradd.sh Please input number10 Please input prefix:wwb wwb1 create ok wwb2 create ok wwb3 create ok wwb4 create ok wwb5 create ok wwb6 create ok wwb7 create ok wwb8 create ok wwb9 create ok wwb10 create ok [root@localhost ~]# cat useradd.sh #!/usr/bin/env bash #useradd #v1.0 by wwb 14/4/2017 read -p "Please input number" num if [[ ! $num =~ ^[0-9]+$ ]];then echo "error number" exit 1 fi read -p "Please input prefix:" prefix for i in `seq $num` do user=${prefix}${i} useradd $user if [ $? -eq 0 ];then echo "$user create ok" fi done