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

bash脚本之交互式脚本case语句read & random

2014-12-04 21:39 225 查看
交互式脚本:要读取来自键盘输入的变量,就用read这个命令。
read [OPTIONS] [name ...]
-p "PROMPT"后面可以直接跟提示符
-t #: 超时时长后面可以接等待“秒数”。

给变量以默认值:[ -z "$VAR" ] && VAR=VALUE

下面我们通过一个练习来了解交互式脚本:
显示如下菜单给用户
cpu) show cpu infomation;
mem) show memory infomation;
disk) show disk infomation;
*) quit
提示用户键入选项:
(1) cpu: 显示CPU相关的信息
(2) mem: 显示内存相关的信息
(3) disk: 列出磁盘设备
(4) 其它任何信息,即为退出脚本
#!/bin/bash
cat << EOF cat与EOF为固定格式 来显示提供给用户的选项
cpu) show cpu infomation;
mem) show memory infomation;
disk) show disk infomation;
*) quit
EOF
read -p "Your choice: " choice 则为read -p所定义的变量名

if [[ "$choice" == 'cpu' ]]; then
lscpu 命令结果显示cup相关信息
elif [[ "$choice" == 'mem' ]]; then
free -m 命令结果显示磁盘相关信息
elif [[ "$choice" == 'disk' ]]; then
fdisk -l /dev/sd[a-z] 显示磁盘分区信息
else
echo "quit"
exit 0
fi

case语句:简洁版的多分支if语句;
case 变量引用 in
PATTERN1)
分支1
;;
PATTERN2)
分支2
;;
...
*)
分支n
;;
esac

PATTERN可使用通配符:
*:任意长度的任意字符
?: 任意单个字符
[]:指定范围内的任意单个字符
a|b: a或者b

练习:写一个脚本,使用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

bash中生成伪随机数:$RANDOM

0-32767
练习:生成10个随机数,返回其最大值;

#!/bin/bash
declare -i max=0 :declare是声明变量的类型,如果使用declare后面没有接任何参数,那么bash就会主动将所有的变量名称与内容全部调出来,就像使用set一样。

for i in {1..10};do

random=$RANDOM 此步骤即为定义随机数
LIST="$LIST $random"
if [ $random -ge $max ];then
max=$random
fi
done
echo "List Number:$LIST"

echo "Max Number:$max"

declare [-aixr] variable
-a :将后面名为 variable的变量定义成为数组 (array)类型
-i :将后面名为variable的变量定义成为整数数字 (integer)类型
-x :用法与export 一样,将后面的variable变成环境变量
-r : 将变量设置成为 readonly类型,该变量不可被更改内容,也不能重设
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息