if条件测试语法:
单分支:
if CONDITION; then CMD1 CMD2 ... fi
test.sh #!/bin/bash shuzhi=$1 if [ $[$shuzhi%2] -eq 0 ];then echo $shuzhi fi
例如:传递一个参数给脚本,而后以此参数为用户名,添加此用户;
#!/bin/bash username=$1 if ! id $username ;then useradd $username fi
if可以嵌套:
if CONDITION1; then if CONDITION2; then CMD fi fi
条件取反:
! CONDITION
双分支:
if CONDITION-TRUE; then 分支1 else 分支2 fi
练习2:写一个脚本
(1) 传递两个整数给脚本;
(2) 返回其较大者;
#!/bin/bash if [ $1 -gt $2 ];then echo $1 else echo $2 fi
练习3:写一个脚本
(1) 传递一个参数给脚本,此参数为用户名;
(2) 如果用户存在,则执行如下任务
(a) 如果用户的id号小于500,显示其为管理员或系统用户;
(b) 否则,显示其为普通用户;
(3) 如果用户不存在,则添加之;
#!/bin/bash if id $1 &> /dev/null; then userid=`id -u $1` if [ $userid -lt 500 ]; then echo "$1 is sysadmin or sysuser." else echo "$1 is A common user." fi else useradd $1 if [ $? -eq 0 ];then echo "Add user $1." else echo "Cannot add $1." fi fi
多分支的if语句:
if CONDITION1-TRUE; then 分支1 elif CONDITION2-TRUE; then 分支2 elif CONDITION3-TRUE; then 分支3 ... else 分支n fi
练习1:传递一个参数给脚本
如果参数为quit,则显示说要退出脚本;
如果参数为yes,则显示说继续;
否则,则显示为无法识别;
#!/bin/bash if [ $1 == "quit" ];then exit elif [ $1 == "yes" ];then echo "jixu" else echo "not find age" fi
练习2:传递一个用户名参数给脚本
(1) 如果用户的id号为0,则显示为管理员;
(2) 如果用户的id号大于6000,则显示为guest;
(3) 如果用户的id号大于500,则显示为普通用户;
(4) 如果用户的id号大于0, 则显示为系统用户;
(5) 否则,无法识别;
练习3:写一个脚本;
(1) 传递一个磁盘设备文件给脚本;
(2) 判断此设备是否存在;如果存在,则清除此设备上的所有分区;
(3) 否则,则无此设备;
case语句:
简洁版的多分支if语句;
语法格式:
case 变量引用 in PATTERN1) 分支1 ;; PATTERN2) 分支2 ;; ... *) 分支n ;; esac
PATTERN可使用通配符:
*:任意长度的任意字符
?: 任意单个字符
[]:指定范围内的任意单个字符
a|b: a或者b
练习1:写一个脚本,使用tar工具把/etc目录备份至/backup目录中,名字为/backup/etc-日期时间.tar.{xz|bz2|gz};
(1) 显示如下菜单
xz) xz compress tool
gzip) gzip compress tool
bzip2) bzip2 compress tool
*) wrong choice and quit
(2) 根据用户选择的工具,执行相应操作;如果用户没有键入任何数据,则默认使用xz;
#!/bin/bash cat<<EOF xz)xz compress tool gzip)gzip compress tool bzip2)bzip2 compress tool *)wrong choice and quit ======================================================= EOF read -t 5 -p "pls input the choice:" command [ -z $command ] && command="xz" ! [ -d /backup ] || mkdir /backup file_path=/backup/etc"-$(date +%Y%m%d%H%M).tar" echo $file_path case $command in "xz") echo "xz" #tar -Jcf $file_path.xz /etc/* ;; "gzip") echo "gzip" #tar -zcf $file_path.gz /etc/* ;; "bzip2") echo "bzip2" #tar -jcf $file_path.bzip2 /etc/* ;; *) echo "wrong choice" ;; esac