本文共 6490 字,大约阅读时间需要 21 分钟。
两种判断格式:
测试选项 | 作 用 |
---|---|
-b 文件 | 判断该文件是否存在,并且是否为块设备文件(是块设备文件为真) |
-c 文件 | 判断该文件是否存在,并且是否为字符设备文件(是字符设备文件为真) |
-d 文件 | 判断该文件是否存在,并且是否为目录文件(是目录为真) |
-e 文件 | 判断该文件是否存在(存在为真) |
-f 文件 | 判断该文件是否存在,并且是否为普通文件(是普通文件为真) |
-L 文件 | 判断该文件是否存在,并且是否为符号链接文件(是符号链接文件为真) |
-p 文件 | 判断该文件是否存在,并且是否为管道文件(是管道文件为真) |
-s 文件 | 判断该文件是否存在,并且是否为非空(非空为真) |
-S 文件 | 判断该文件是否存在,并且是否为套接字文件(是套接字文件为真) |
举例:
# 第一个判断命令如果正确执行,则打印“yes”,否则打印“no”[ -d /root ] && echo "yes" || echo "no"
测试选项 | 作 用 |
---|---|
-r 文件 | 判断该文件是否存在,并且是否该文件拥有读权限(有读权限为真) |
-w 文件 | 判断该文件是否存在,并且是否该文件拥有写权限(有写权限为真) |
-x 文件 | 判断该文件是否存在,并且是否该文件拥有执行权限(有执行权限为真) |
-u 文件 | 判断该文件是否存在,并且是否该文件拥有SUID权限(有SUID权限为真) |
-g 文件 | 判断该文件是否存在,并且是否该文件拥有SGID权限(有SGID权限为真) |
-k 文件 | 判断该文件是否存在,并且是否该文件拥有SBit权限(有SBit权限为真) |
举例:
# 判断文件是拥有写权限的[ -w student.txt ] && echo "yes" || echo "no"
测试选项 | 作 用 |
---|---|
文件1 -nt 文件2 | 判断文件1的修改时间是否比文件2的新(如果新则为真 newer than) |
文件1 -ot 文件2 | 判断文件1的修改时间是否比文件2的旧(如果旧则为真 older than) |
文件1 -ef 文件2 | 判断文件1是否和文件2的Inode号一致,可以理解为两个文件是否为同一个文件。这个判断用于判断硬链接是很好的方法 |
举例:
# 创建个硬链接ln /root/student.txt /tmp/stu.txt# 用test测试下,果然很有用[ /root/student.txt -ef /tmp/stu.txt ] && echo "yes" || echo "no" yes
测试选项 | 作 用 |
---|---|
整数1 -eq 整数2 | 判断整数1是否和整数2相等(相等为真) |
整数1 -ne 整数2 | 判断整数1是否和整数2不相等(不相等位置) |
整数1 -gt 整数2 | 判断整数1是否大于整数2(大于为真) |
整数1 -lt 整数2 | 判断整数1是否小于整数2(小于位置) |
整数1 -ge 整数2 | 判断整数1是否大于等于整数2(大于等于为真) |
整数1 -le 整数2 | 判断整数1是否小于等于整数2(小于等于为真) |
举例:
[ 23 -ge 22 ] && echo "yes" || echo "no" yes#判断23是否大于等于22,当然是了[ 23 -le 22 ] && echo "yes" || echo "no" no#判断23是否小于等于22,当然不是了
测试选项 | 作用 |
---|---|
-z 字符串 | 判断字符串是否为空(为空返回真 ) |
-n 字符串 | 判断字符串是否为非空(非空返回真 ) |
字串1 == 字串2 | 判断字符串1是否和字符串2相等(相等返回真) |
字串1 != 字串2 | 判断字符串1是否和字符串2不相等(不相等返回真) |
举例:
name=sc#给name变量赋值[ -z "$name" ] && echo "yes" || echo "no" no# 判断name变量是否为空,因为不为空,所以返回noaa=11bb=22#给变量aa和变量bb赋值[ "$aa" == "$bb" ] && echo "yes" || echo "no" no#判断两个变量的值是否相等,明显不相等,所以返回no
测试选项 | 作用 |
---|---|
判断1 -a 判断2 | 逻辑与,判断1和判断2都成立,最终的结果才为真 |
判断1 -o 判断2 | 逻辑或,判断1和判断2有一个成立,最终的结果就为真 |
!判断 | 逻辑非,使原始的判断式取反 |
举例:
aa=11[ -n "$aa" -a "$aa" -gt 23 ] && echo "yes" || echo "no"no#判断变量aa是否有值,同时判断变量aa的是否大于23#因为变量aa的值不大于23,所以虽然第一个判断值为真,返回的结果也是假aa=24[ -n "$aa" -a "$aa" -gt 23 ] && echo "yes" || echo "no"yes
if [ 条件判断式 ];then 程序 fi
if [ 条件判断式 ] then 程序fi
if [ 条件判断式 ] then 条件成立时,执行的程序 else 条件不成立时,执行的另一个程序fi
if [ 条件判断式1 ] then 当条件判断式1成立时,执行程序1elif [ 条件判断式2 ] then 当条件判断式2成立时,执行程序2 „省略更多条件…else 当所有条件都不成立时,最后执行此程序fi
#!/bin/bash# 备份mysql数据库。 # Author: jerry# 同步系统时间,联网有效ntpdate asia.pool.ntp.org &>/dev/null#把当前系统时间按照“年月日”格式赋予变量datedate=$(date +%y%m%d) #统计mysql数据库的大小,并把大小赋予size变量size=$(du -sh /var/lib/mysql) if [ -d /tmp/dbbak ] then echo "Date : $date!" > /tmp/dbbak/dbinfo.txt echo "Data size : $size" >> /tmp/dbbak/dbinfo.txt cd /tmp/dbbak tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &>/dev/null rm -rf /tmp/dbbak/dbinfo.txt else mkdir /tmp/dbbak echo "Date : $date!" > /tmp/dbbak/dbinfo.txt echo "Data size : $size" >> /tmp/dbbak/dbinfo.txt cd /tmp/dbbak tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &>/dev/null rm -rf /tmp/dbbak/dbinfo.txtfi
#!/bin/bash# Author: jerry# 使用nmap命令扫描服务器,并截取apache服务的状态,赋予变量portport=$(nmap -sT 192.168.1.156 | grep tcp | grep http | awk '{print$2}')if [ "$port" == "open" ] then echo “$(date) httpd is ok!” >> /tmp/autostart-acc.log else /etc/rc.d/init.d/httpd start &>/dev/null echo "$(date) restart httpd !!" >> /tmp/autostart-err.logfi
#!/bin/bash# 判断用户输入的是什么文件# Author: jerry# 接收键盘的输入,并赋予变量fileread -p "Please input a filename: " fileif [ -z "$file" ] # 判断file变量是否为空 then echo "Error,please input a filename" exit 1elif [ ! -e "$file" ] # 判断file的值是否存在 then echo "Your input is not a file!" exit 2elif [ -f "$file" ] # 判断file的值是否为普通文件 then echo "$file is a regulare file!"elif [ -d "$file" ] # 判断file的值是否为目录文件 then echo "$file is a directory!"else echo "$file is an other file!"fi
case $变量名 in "值1") 如果变量的值等于值1,则执行程序1 ;; "值2") 如果变量的值等于值2,则执行程序2 ;; …省略其他分支… *) 如果变量的值都不是以上的值,则执行此程序 ;;esac
#!/bin/bash#判断用户输入# Author: jerryread -p "Please choose yes/no: " -t 30 chocase $cho in "yes") echo "Your choose is yes!" ;; "no") echo "Your choose is no!" ;; *) echo "Your choose is error!" ;;esac
for 变量 in 值1 值2 值3do 程序done
for ((初始值;循环控制调节;变量变化)) do 程序 done
#!/bin/bash# Author:jerry# 批量解压缩软件包cd /lampls *.tar.gz > ls.log #ls *.tar.gz 输出结果覆盖到ls.log文件for i in $(cat ls.log) do tar -zxf $i $>/dev/null donerm -rf /lamp/ls.log
#!/bin/bash# Author: jerry# 批量添加新用户# 输入用户名,等待时间30sread -p "Please input user name: " -t 30 name # 输入创建用户个数,等待时间30sread -p "Please input the number of users: " -t 30 num # 输入用户密码,等待时间30sread -p "Please input the password of users: " -t 30 pass #判断输入信息是否为空if [ ! -z "$name" -a ! -z "$num" -a ! -z "$pass" ] then # 通过sed命令把所有的数字替换为空 y=$(echo $num | sed s/'^[0-9]*$'//g) if [ -z "$y" ] # 如果num为数字,y必为空 then for ((i=1;i<=$num;i++)) #开始循环 do # 建立用户 /usr/sbin/useradd "$name$i" &>/dev/null # 设置用户密码,与用户名相同 echo $pass | /usr/bin/passwd --stdin "$name$i" &>/dev/null done echo "Build seccees!" fifi
# 语法一while [ 条件判断式 ] do 程序 done # 语法二while:do if [ 条件判断式 ] then exitdone
until [ 条件判断式 ] do 程序 done
#!/bin/bash# 从1加到100# Author: jerryi=1s=0# 如果变量i的值小于等于100,则执行循环while [ $i -le 100 ] do s=$(( $s+$i )) i=$(( $i+1 )) doneecho "The sum is: $s
#!/bin/bash# 从1加到100# Author: jerryi=1s=0# 如果变量i的值小于等于100,则执行循环until [ $i -gt 100 ] do s=$(( $s+$i )) i=$(( $i+1 )) doneecho "The sum is: $s
转载地址:http://uwsoi.baihongyu.com/