1.for循环
#语法一
for 变量 in 值1 值2 值3..
do
程序块儿
done
#
#语法二
for 变量 `命令` #注意这里的符号,不是'',而是``
do
程序块儿
done
#
#语法三
for ((初始值; 循环控制; 变量变化))
do
程序块儿
done
实例:依次向某个目录中的每个文件或子目录问好,形如:
(提示:for FILE in /var/*;或for FILE in `ls /var`;)
Hello,log
并统计/该目录下共有多个文件,并显示出来
#!/bin/bash
cd /home/easadon
ls
let num=0
for I in `ls /home/easadon`;
do
echo "hello $I"
num=$[$num+1]
done
echo "the number of files is $num"
运行结果:
2.参数传递
方式一:$0,$1,$2..
采用$0,$1,$2..等方式获取脚本命令行传入的参数,值得注意的是,$0获取到的是脚本路径以及脚本名,后面按顺序获取参数,当参数超过10个时(包括10个),需要使用${10},${11}....才能获取到参数,但是一般很少会超过10个参数的情况。
方式二:getopts
语法格式:getopts [option[:]] [DESCPRITION] VARIABLE
option:表示为某个脚本可以使用的选项
":":如果某个选项(option)后面出现了冒号(":"),则表示这个选项后面可以接参数(即一段描述信息DESCPRITION)
VARIABLE:表示将某个选项保存在变量VARIABLE中
实例:编写一个脚本,具有三个传入的参数,第一个代表运算符号,接下来两个代表要计算的数,输出计算结果
#!/bin/bash
echo "脚本路径:$0"
echo "first number :$2"
echo "second number:$3"
a=$2
b=$3
while getopts ":c:d:e:f:" opt
do
#c:add d:subtract e:multiply f:divide
case $opt in
c)
echo "加法:$[$a+$b]"
;;
d)
echo "减法:$[$a-$b]"
;;
e)
echo "乘法:$[$a*$b]"
;;
f)
echo "除法:$[$a/$b]"
;;
?)
echo "未知参数"
exit 1
;;
esac
done
运行结果
3.设置数字区间
方式1:{1..10}
方式2:`seq 1 10`
编写一个脚本,通过ping命令测试192.168.0.245到192.168.0.254之间的所有主机是否在线
如果在线,就显示“ip is up”
如果不在线,就显示“ip is down”
#!/bin/bash
for I in `seq 245 254`
#for I in {245..254}
do
ping -c1 -w1 192.168.0.$I &>/dev/null && echo "192.168.0.$I is up" || echo "192.168.0.$I is down"
done
4.颜色设置
echo -e "\033[字背景颜色;字体颜色m字符串\033[0m"
字背景颜色范围:40----49
40:黑
41:深红
42:绿
43:黄色
44:蓝色
45:紫色
46:深绿
47:白色
字颜色:30-----------39
30:黑
31:红
32:绿
33:黄
34:蓝色
35:紫色
36:深绿
37:白色
===============================================ANSI控制码的说明
\33[0m 关闭所有属性
\33[1m 设置高亮度
\33[4m 下划线
\33[5m 闪烁
\33[7m 反显
\33[8m 消隐
\33[30m -- \33[37m 设置前景色
\33[40m -- \33[47m 设置背景色
\33[nA 光标上移n行
\33[nB 光标下移n行
\33[nC 光标右移n行
\33[nD 光标左移n行
\33[y;xH设置光标位置
\33[2J 清屏
\33[K 清除从光标到行尾的内容
\33[s 保存光标位置
\33[u 恢复光标位置
\33[?25l 隐藏光标
\33[?25h 显示光标
例子:编写一个脚本可以控制字符串的颜色输出
#!/bin/bash
echo "Enter the string:"
read str
echo "Enter the Background color:"
read bcolor
echo "Enter the word color:"
read wcolor
echo -e "\033[${bcolor};${wcolor}m${str}\033[0m"
echo -e "\033[47;30m$str\033[0m"