您的位置:首页 > 运维架构 > Shell

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已经挂载,就显示其挂载点

#!/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” 博客,转载请与作者联系!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: