8.15 交互输入与for语句
交互输入与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="dsasgg"
输入内容
2、for语句循环
文件判断脚本:
#!/bin/bash
#
read -p "输入一个文件名:"name
if [ -z $name ];then
echo"usage:输入一个文件名: /etc/fstab"
exit 1
fi
if [ -e $name ];then
echo"输入的文件不存在!"
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
for语句的应用场景:
有一个功能,这个功能都需要循环执行,只是执行的对象不同(对象必须是同类数据)
优点:不易进入死循环
for语句格式:
在python程序中,我们很多情况下,需要调用响应的方法去生成列表;
for 变量 in {列表};do
循环体
done
99乘法表:
#!/bin/bash
#
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
for语句循环的另外一种写法:
基于C语言格式for语句写法:
for((初始条件;条件判断语句;条件值变化语句));do
循环体
done
#while语句的格式
初始值
while 条件;do
循环体
let i++ //变化初始值
done
#
echo -e
-e 使echo命令能够识别特殊字符;
-r 回车不换行
-n 换行符
-t 制表符
列表的生成方式:
1、直接给出字符串列表
2、整数列表
a{start...end} {1..1}这种写法是不行的
b seq 命令引用 $(seq [start [step] end])
步长 python range{1.100,2}2表示步长
seq 20 30
题目:写一个for循环,遍历本网络网段中所有up的电脑
#!/bin/bash
#
declare -i sum=0
for i in $(seq 1 254);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
题目: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 个"
常见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` -eq -lt 100k -a -x $filename]
注意,做字符串匹配的时候不支持正则以及通配符
2、test test = = [[ ]]
在链接两个test命令的时候,不能使用命令内部option [-o -a]
一般使用&& || == != >= <=
ex:[[ yum.log = = *.log ]]
5、变量引用 - - 传参
$@ $* 将参数作为for循环的列表
需要用多个词的时候用"$@"
需要用一个词的时候用"$*"
$0 和awk不一样
bash中$0代表运行的脚本文件
awk中$0代表整行内容 --awk按行执行