交互输入与for语句
1、交互输入
输入:read 变量
常用参数:
-p // 提示
-t // 定义超时时间(要写在-p前面)
脚本默认值:
当没有输入变量值并想直接向下运行,这时需要默认值;
输出:echo “”
常用参数:
-n // 取消换行
-e // 使echo命令能够识别特殊字符
常用的特殊字符:
2、For语句循环
格式:
For 变量 in 列表;do
循环体
done
[对象必须是同类数据]
列表生成方式:
2、1直接给出字符串列表
2、2整数列表
a{start ... end}
B seq 命令引用 $(seq [start[step]] end)
2、3返回列表命令
$(COMMAND)
2、4glob机制
示例:同上脚本功能
2、5变量引用
$@ $* 将参数作为for循环的列表
3、case语句
-- 做匹配
case语句的语法格式:
case 变量 in
PATTEN1)
代码块1
;;
PATTEN2)
代码块2
;;
*)
代码库
esac
例:
1)、文件判断脚本
#!/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
2)、九九乘法表
#!/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))` " 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] " done echo done
3)、写一个for循环,遍历本网络网段中所有up的电脑
#!/bin/bash # 遍历 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 台电脑在线"
4)、求1到100偶数和
#!/bin/bash # 偶数和 declare -i sum=0 for i in $(seq 0 2 100);do let sum+=$i done echo “总数为:$sum”
5)、判断 /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` -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、变量引用
$@ $* 将参数做为for循环的列表