交互输入与for语句
1、交互输入
read 和input()一个效果
read a b c
aa bb cc
read命令同时可以定义多个变量值;而输入的内容默认以空格为分隔符,将值输入到对应的变量中;
如果默认值过多,最后所有的值都会被赋予给最后一个变量;
如果默认值过少,多余的变量则为空;
read如何输入:
echo“请输入一个目录:”
我们需要echo -n 取消换行符号
echo “请输入一个目录:”;read 变量
请输入一个目录:/etc
常用参数:
-a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符
-d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志。
-p 后面跟提示信息,即在输入前打印提示信息。
-e 在输入的时候可以使用命令补全功能。
-n 后跟一个数字,定义输入文本的长度,很实用。
-r 屏蔽,如果没有该选项,则作为一个转义字符,有的话 就是个正常的字符了。
-s 安静模式,在输入字符时不再屏幕上显示,例如login时输入密码。
-t 后面跟秒数,定义输入字符的等待时间。
-u 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的。
read -p “请输入一个目录” 变量
-t 定义超时时间
read -t 5 -p "请输入一个目录:"变量
脚本默认值
输入内容----------------------------------------------------------
| |
输入是否正确------------------ 没有输入--------------
| | | |
正确 不正确,给提示 提示必须输入 给默输出
for语句
应用场景:有一个功能,这个功能需要循环执行,只是执行对象不同;【对象必须是同类数据】
for语句格式:
for 变量 in 列表;do
循环体
done
99乘法表:
for i in `seq 9`
do
for j in `seq 9`
do
[ $j -le $i ] && echo -n "$i*$j= `echo $(($i*$j))` "
done
echo " "
done
这里补一下echo的参数:
-e :使用echo命令,能够识别特殊字符
回车不换行
换行符
制表符tab = 4个空格
列表生成方式:
1、直接给出字符串列表
2、整数列表b
a{start..end}
b seq 命令引用 $(seq[seq [seq]]end)
3、返回列表的命令
$(命令)
例子:统计/var/log/的所有日志文件,并显示
for i in $(ls /var/log);do
if ["*.log" = $i];then
echo $i
let sum++
fi
down
echo "*.log结尾的文件有:$sum"
4、glob机制--文件名通配符的机制
$(ls /var/log)
/var/log/*
示例:同上脚本功能
5、变量引用
$@$*将参数作为for循环的列表
$0---和awk不一样
bash中$0代表运行脚本文件;
awk中$0整行内容 ----awk按行执行
小节:test命令总结:
1、test的命令的参数 -a -o只能在命令中使用
例如:[`du -h $filename|cut -d: -f1` -lt 100k -a -x $filename]
注意:做字符串匹配的时候,不支持正则以及文件通配符
2、test test==[[ ]]
在连接两个test的命令的时候,不能使用命令内部的参数 -o -a
例子:[[yum.log == *.log]]
case语句
case语句的语法格式:
case 变量 in
PATTEN1)
代码块1
;;
PATTEN2)
代码块2
;;
*)