交互输入与for语句
1、交互输入 read Python中用input()函数,进行输入;
read命令同时可以定义多个变量值;而输入的内容默认以空格为分隔符,将值输入到对应的变量中; 如果默认值过多,最后所有的值都会被赋予给最后一个变量; 如果默认值过少,多余的变量则为空值;
示例: read a b c aa bb cc read如何输入: echo "请输入一个目录:" 我们需要 echo -n 取消换行符号 echo "请输入一个目录:";read 变量 请输入一个目录:\etc 常用参数: -p read -p "请输入一个目录:" 变量 -t 定义超时时间 read -t 5 -p "请输入一个目录:" 变量 脚本默认值 [ ! -n $filename ] && filename="zhangjie"
输入内容------------------------------------------- | | 输入是否正确---------- 没有输入------------------------------ | | | | 正确 不正确,给提示 提示必须输入 给出默认值 练习:输入一个设备文件,输出这个设备文件的基本信息; #!/bin/bash # read -t 5 -p "输入一个设备文件名:" devname [ -z $devname ] && fdisk -l && exit 1
if [ -b /dev/$devname ];then fdisk -l /dev/$devname exit 0 else echo "$devname 不是设备文件" echo "Usage:‘请输入一个设备文件,如 sda‘" fi 2、for语句循环 while until
回顾:文件判断脚本; #!/bin/bash # read -p "输入一个文件名:" name if [ -z $name ];then echo "Usage:‘输入一个文件名:/etc/fstab‘" exit 1 fi
if [ ! -e $name ];then echo "提示:输入的文件不存在!!fool" exit 2 elif [ -f $name ];then echo "$name is a file" elif [ -d $name ];then echo "$name is a dir" elif [ -b $name ];then echo "$name is a block file" elif [ -L $name ];then echo "$name is a Link file" else echo "$name是其他文件类型" fi case 语句? -- 做匹配 case语句的语法格式:
case 变量 in PATTEN1) 代码块1 ;; PATTEN2) 代码块2 ;; *) 代码库 esac
----------------------------------------------- for语句的应用场景: 有一个功能,这个功能需要循环执行,只是执行对象不同;【对象必须是同类数据】
for语句格式: a=[‘a‘,‘b‘,‘c‘] -- 在Python程序中,我们很多情况下,需要调用相应的方法去生成列表; for 变量 in 列表;do 循环体 done
99乘法表: {1..9} #!/bin/bash # for i in `seq 9`;do for j in `seq 9`;do [ $j -le $i ] && echo -n -e "$i*$j=`echo $(($i*$j))`\t" done echo " " done
#!/bin/bash # 99乘法表 for i in {1..9};do for j in {0..$i} ; do echo -n -e "$j*$i=$[$i*$j]\t" done echo done
echo -e -e : 使echo命令,能够识别 特殊字符; \r 回车不换行 \n 换行符 \t 制表符 tab = 4个空格 unix2dos \r\n -- > \n dos2unix
列表的生成方式: 1、直接给出字符串列表 for i in a b c d e ;do 循环体 done
2、整数列表 a {start ... end} // {1..1}是不行的 {1..9} == python range{1,100} b seq 命令引用 $(seq [start [step]] end) 步长 python range{1,100,2} seq 20 30
题目:写一个for循环--遍历本网络网段中所有up的电脑 #!/bin/bash # ping遍历
declare -i sum=0
for i in $(seq 1 100);do ping -c 1 -w 1 10.6.12.$i &> /dev/null if [ $? -eq 0 ];then let sum++ echo "10.6.12.$i 是通的" else echo "10.6.12.$i 是不通的" fi done
echo "总共有 $sum 台电脑在线"
题目:1到100的偶数和 #!/bin/bash # 偶数和 declare -i sum=0
for i in $(seq 0 2 100);do let sum+=$i done
echo “总数为:$sum”
3、返回列表的命令 $(COMMAND) 应用场景: ls /var/log/ 题目:判断 /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"
题目:netstat -tan 查看网络状态,统计 LISTEN 出现的状态次数、ESTABLISHED出现的状态次数、OTHER 状态出现的次数;
vim 常见用法: 命令模式: dd 剪切 5dd p 粘贴 yy 复制 5yy p 粘贴
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 一般使用 || && == != >= <= [[ yum.log == *.log ]]
5、变量引用 [email protected] $* 将参数做为for循环的列表
case while until
keepalived -- 主备 需求:每一个小时去匹配一下主备设备的keepalived的配置文件是否相同? hash 安全:1、加密 2、校验 3、原认证 4、证书认证(不可否性) 2、校验:hash
函数 字符串处理 数组
sedawk