shell脚本8-15
交互输入与for语句(8-15)
交互输入
1、read的用法:read命令同时可以定义多个变量值,而输入的内容默认可以空格为分配符,将值输入到对应的变量中;如果默认值过多最后所有的值都会被赋予给最后一个变量
2、如果默认是过少,多余的变量则为空值。
3、实例 read a b c aa bb cc
4、Read如何输入:echo “请输入一个目录”(我们需要echo -n取消换行符号)
Echo “请输入人一个目录:”read变量(请输入一个目录/etc)
5、常用参数:-p 例:read -p “请输入一个目录”变量
-t:定义超时时间 例:read -t 5 -p“请输入一个目录:”变量
6、脚本默认值:
练习:
输入一个设备文件,输出这个设备文件的基本信息。
#!/bin/bash
#输入一个设备文件,输出这个设备文件的基本信息。
read -t 5 -p "请输入一个设备文件名:" devname
[ -z $devname ] && devname=`fdisk -l`
if [ -b /dev/$devname ];then
fdisk -l /dev/$devname
exit 0
else
echo "$devname不是设备文件"
echo "Usage:'请输入一个设备文件,如sda'"
fi
执行结果:
7、case语句的语法格式:
case 变量 in
PATTEN1)
代码块1
;;
PATTEN2)
代码块2
;;
*)
代码库
esac
For语句循环
1、应用场景:有一个功能,该功能需要循环执行,只是循环的对象不同,但是循环对象是同类数据
2、for语句格式:
for 变量 in 列表;do
循环体
Done
3、echo命令参数:-e:使echo命令能够识别特殊字符
\r:回车不换行
\n:换行且光标移至行首
\t:制表符(tab键)
-n:不换行输出
4、列表的生成方式:1、直接给出字符列表(例:for i in a b c d e f;do)
2、整数列表 a{start....end}
b seq命令引用$(seq [start[step]] end)
(seq最常用功能的就是步长)
3、返回列表的命令(例:$(命令))
4、glob机制----文件名通配符的机制
5、变量应用----传参:$@ $*将参数作为for循环的列表
$0和awk不一样,bash中的$0代表运行的脚本文件
Awk中的$0代表整行内容 ----awk按行执行
需要多个词的时候用“$@”,需要一个词的时候用“$”
5、vim常见用法:命令模式下dd为剪切,yy为复制,p为粘贴
6、test命令总结:1、test的命令的参数-a、-o只在命令中使用;注:做字符匹配时不支持正则表达式和通配符
2、test test==[[]],在连接两个test的命令的时候,不能使用命令内部的参数-a、-o,一般使用|| && == != >= <=