在理解选择结构语句之前,我们先看看几个有意思的bash编程变量进阶替换,这些进阶的替换在很多时候能给我们带来快捷方便的处理方式。
一、bash编程之变量替换的进阶
1、${parameter:-word}
当变量未定义或者值为空时,返回值为word的内容,否则返回变量的值.
2、${parameter:=word}
若变量未定义或者值为空时,在返回word的值的同时将word赋值给value
3、${parameter:?word}
若变量以赋值的话,正常替换.否则将消息message送到标准错误输出(若此替换出现在Shell程序中,那么该程序将终止运行)
4、${parameter:+word}
若变量以赋值的话,其值才用word替换,否则不进行任何替换
5、${parameter#*word}
${parameter##*word}
去掉parameter中与word相匹配的部分,条件是parameter与word相匹配从开头开始,#与##的区别在于#是最短匹配模式,##是最长匹配模式.
6、${parameter%word*}
${parameter%%word*}
去掉parameter中与word相匹配的部分,条件是parameter与word相匹配从尾部 开始,%与%%的区别在于%是最短匹配模式,%%是最长匹配模式.
eg:
1、FILE=/usr/local/src
${FILE#*/}: usr/local/src
${FILE##*/}: src
${FILE%/*}: /usr/local
${FILE%%/*}:
二、if选择语句
1、单分支if语句
if 条件 ;then
语句1
语句2
···
fi
eg:
2、写一个脚本,实现如下功能:
如果设备/dev/sda3已经挂载,就显示其挂载点
#!/bin/bash # Device='/dev/sda3' if mount | grep "^$Device" &> /dev/null; then mount | grep "/dev/sda3" | cut -d' ' -f3 fi
2、双分支if语句
if 条件 ;then
语句1
语句2
···
else
语句1
···
fi
eg:
3、给定一个用户,如果其UID等于GID,就说明这是个“good guy”,否则,“Bad guy.”
#!/bin/bash # UserName=user1 if [ `id -u $UserName` -eq `id -g $UserName` ]; then echo "Good Guy." else echo "Bad Guy." fi
3、多分支if语句
if 条件1 ;then
语句1
语句2
···
elif 条件2 ;then
语句1
语句2
···
else
语句1
语句2
···
fi
eg:
4、写一个脚本,能接受参数gzip、bzip2或xz,而后能将/etc/目录备份至/backup目录,并以参数指定的形式压缩存放;文件名称包含脚本执行时刻的时间;
#!/bin/bash # Com=$1 if [ -z $Com ]; then Com=gzip fi [ -d /backup ] || mkdir /backup if [ $Com == 'gzip' ]; then tar zcf /backup/etc-`date +%F-%H-%M-%S`.tar.gz /etc/* [ $? -eq 0 ] && echo "Backup etc finished.(gzip)." elif [ $Com == 'bzip2' ]; then tar jcf /backup/etc-`date +%F-%H-%M-%S`.tar.bz2 /etc/* [ $? -eq 0 ] && echo "Backup etc finished.(bzip2)." elif [ $Com == 'xz' ]; then tar Jcf /backup/etc-`date +%F-%H-%M-%S`.tar.xz /etc/* [ $? -eq 0 ] && echo "Backup etc finished.(xz)." else echo "Usage: `basename $0` {[gzip|bzip2|xz]}" exit 6 fi
三、case选择语句
case ${ } (变量引用)in
value1)
语句1
语句2
···
;;
value2)
语句1
语句2
···
;;
value3)
语句1
语句2
···
;;
*)
语句1
语句2
···
;;
esac
eg:
5、写一个脚本
1)、显示如下菜单给用户:
m|M) show memory usages;
d|D) show disk usages;
q|Q) quit
2)、如果用户选择了第一项,则显示内存使用信息;
如果选择了第二项,则显示磁盘挂载及使用相关信息;
如果是第三项,退出,并显示选择退出;
其它任何内容,均说明错误选项;
#!/bin/bash cat << EOF m|M) show memory usages; d|D) show disk usages; q|Q) quit EOF read -p "Your choice: " Choice case $Choice in m|M) free -m ;; d|D) df -lh ;; q|Q) echo "Quit..." exit 0 ;; *) echo "Invalid input." exit 5 ;; esac
转载于:https://blog.51cto.com/zhengliyang/1261816