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类型,该变量不可被更改内容,也不能重设
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类型,该变量不可被更改内容,也不能重设
相关文章推荐
- bash应用实例--交互式进程(如telnet)的自动处理脚本
- 第五课-第四讲05_04_bash脚本编程之三 条件判断及算术运算
- bash脚本编程基础
- bash脚本语言学习
- ubuntu下shell脚本运行异常:bash和dash的区别
- Linux基础之bash脚本进阶篇-数组
- shell脚本报错问题: -bash: ./test.sh: /bin/sh^M: bad interpreter: No such file or directory
- Linux脚本开头#!/bin/bash和#!/bin/sh是什么意思以及区别
- bash脚本编程之在bash脚本中使用选项
- 将文件拷贝n份的bash脚本
- ~/.bashrc 和 ~/.bash_profile 和 /etc/bashrc 和 /etc/profile 脚本的区别和启动加载顺序
- bash脚本:函数
- Bash玩转脚本5之Windows上修改环境变量的脚本系统
- 写了个bash脚本让 vim可以识别include
- Linux基础入门及系统管理01-bash脚本编程之三整数测试及算术运算18
- 【BASH】自己主动清理rman脚本备份文件
- bash脚本编程之九 while循环
- Bash脚本15分钟进阶教程
- Linux01-bash脚本编程之七case语句及脚本选项进阶27
- 玩转Bash脚本:特殊变量