shell 脚本 语法 之选择语句 (二)
2013-07-31 21:59
441 查看
在理解选择结构语句之前,我们先看看几个有意思的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已经挂载,就显示其挂载点
2、双分支if语句
if 条件 ;then
语句1
语句2
・・・
else
语句1
语句2 ・・・
fi
eg:
3、给定一个用户,如果其UID等于GID,就说明这是个“good guy”,否则,“Bad guy.”
3、多分支if语句
if 条件1 ;then
语句1
语句2
・・・
elif 条件2 ;then
语句1
语句2
・・・
else
语句1
语句2
・・・
fi
eg:
4、写一个脚本,能接受参数gzip、bzip2或xz,而后能将/etc/目录备份至/backup目录,并以参数指定的形式压缩存放;文件名称包含脚本执行时刻的时间;
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)、如果用户选择了第一项,则显示内存使用信息;
如果选择了第二项,则显示磁盘挂载及使用相关信息;
如果是第三项,退出,并显示选择退出;
其它任何内容,均说明错误选项;
本文出自 “丿Sky 灬ONE PEICE” 博客,转载请与作者联系!
一、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
语句2 ・・・
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
本文出自 “丿Sky 灬ONE PEICE” 博客,转载请与作者联系!
相关文章推荐
- shell 脚本 语法之循环语句 (一)
- 【Linux】中shell脚本语法篇之条件语句和循环语句
- shell脚本编程之选择执行之if语句
- shell脚本编写 之 条件选择,条件判断,循环语句
- Shell脚本被source时选择跳过一些语句
- shell脚本不使用if语句进行选择的脚本
- Linux的Shell脚本中IF流程控制语句的基本语法
- Shell脚本的基本语法(二) 预定义特殊字符、case语句和函数调用
- shell脚本之选择结构&常用语法(一)
- java语法基础-程序流程控制-选择结构-switch语句
- Shell脚本的条件控制和循环语句
- Shell脚本循环语句——for循环
- 使用shell脚本生成*Db.java、*.thrift或*.yaml文件语句
- cygwin 执行shell脚本时出现出现语法异常,连最基本的if 控制都解析不了的原因
- Shell脚本语法
- shell脚本基本语法详解
- (转)Linux bash shell脚本语法入门
- Linux入门第五天——shell脚本入门(中)基础语法之判断与条件
- shell脚本中导入mysql数据&&执行mysql语句
- Shell脚本的条件控制和循环语句