交互输入与for语句
交互输入与for语句
1、交互输入
read a b c
read命令同时可以定义多个变量值;而输入的内容默认以空格为分隔符,将值输入到对应的变量中;
如果默认值过多,最后所有的值都会被赋予给最后一个变量;
如果默认值过少,多余的变量则为空值;
read如何输入:
echo”请输入一个目录:”
我们需要echo –n取消换行符号
echo”请输入一个目录:”;read变量
请输入一个目录:\etc
常用参数:
-p
read -p”请输入一个目录:” 变量
-t 定义超时时间
Read –t 5 –p “请输入一个目录:”变量
脚本默认值
[!-n $filename]&&filename=”wsq”
-n 存在为真 –z不存在为真
输入是否正确-------------------------
| |
输入是否正确-------------------- 没有输入-------------------------
| | | |
正确 不正确 提示必须输入 输出默认值
fdisk –l 显示所有内容
-b 判断是否为快文件
For语句的应用场景:
有一个功能,这个功能需要循环执行,只是执行对象不同;对象必须是同类数据
For语句格式:
a=[‘a’,’b’,’c’]----在python程序中,我们很多情况下,需要调用相应的方法去生成列表;
for 变量in列表;
循环体
Done
99乘法表:
{1..9}
#!/bin/bash
for i in `seq 9`;do
For j in `seq i`do
[ $j –le $i ]&& echo –n ”$i*$j=`echo $(($i*$j))` \t”
done
echo” ”
done
echo –n 不换行输出
echo –e 使echo命令,能够识别特殊字符:\r回车不换行 \n换行符 \t 制表符tab=4个空格
arp –a 查看当前的所有主机
seq 1 2 100 中间是步长 输出所有偶数
列表的生成方式:
1、直接给出字符串列表
2、整数列表
a{start…end} \\{1..1}不行 {1..9}==pythoy range{1,100}
b seq命令引用 $(seq[start [step]] end)
步长 python range{1,100,2 }
Seq 20 30
3、返回列表的命令
$(COMMAND)
场景:ls /var/log/
4、glob机制
示例:同上脚本功能
$(ls /var/log)
/var/log/*
Test命令总结:
1、test的命令的option的-a –o只在命令中使用;
例如[`du –h $filename|cut –d: -f1`-lt 100k –a –x $filename ]
test `du –h $filename|cut –d: -f1`-lt 100k –a –x $filename
注意:做字符串匹配的时候,不支持正则以及通配符
2、test test=[[ ]]
在连接两个test的命令的时候,不能使用命令内部option –o –a
一般使用|| &&== !=
[[ ]]
5、变量引用
$@ $* 将参数做为for循环的列表
$0---和awk不一样
bash中$0代表运行的脚本文件;
awk中$0 ----awk按行执行
需要多个词的时候用”$@”,需要一个词的时候用”$*”
练习1:写一个for循环—遍历本网络网段中所有up电脑
#!/bin/bash
declare –i sum=0
for i in ${seq 1 100};do #地址1-100
ping –c 1 –w 1 10.6.12.$i> /dev/null #-c 一个包
if [ $? –eq 0];then
let sum++
echo”10.6.12.$i 是通的”
else
echo”10.6.12.$i 是不通的”
fi
done
echo “总共$sum有台电脑在线”
练习2:1到100的偶数和
#!/bin/bash
declare –i sum=0
for i in ${seq 0 2 100};do #步长为
let sum+=$i
done
echo “总数为:$sum”
练习3:判断 /var/log/的所有文件,以log.结尾
#!/bin/bash
declare –i sum=0
for i in ${ls /var/log};do
if [ “*.log”= $i];then
echo $i
let sum++
fi
done
echo ”.log结尾的文件有:$sum”
练习4:netstat –tan 查看网络状态,统计LISTEN出现的状态次数、ESTABLISHED出现的状态次数
netstat –tan | grep “^tcp ”| awk ’{print $6}’
for i in $( netstat –tan | grep “^tcp ”| awk ’{print $6}’);do if [$i =” LISTEN”];then let xxx elif[$i =” ESTABLISHED”];