Bash脚本:把许多指令集合在一起,提供循环、条件、判断等,用以编写程序
1.脚本用/bin/bash执行 #!/bin/bash
2.脚本调试和执行 sh test.sh
sh -x test.sh
3.转义和引用
(1).转义和引用:解析字符串时,用于除去字符串中特殊字符或保留词语的特殊含义
引用:fruit = apple
echo "can I have a $fruit"
转义:echo make \$\$\$fast
4.变量:用于在脚本中使用的名称指定值
fruit = apple
echo $fruit echo ${fruit}
5.替换:执行指定命令并用命令输出替换脚本中的命令
today=$(date +%Y-%m-%d)
echo today
echo $today
6.for 循环:用于值列表中相同命令的重复
for host in file{1..3};do echo $host; done
7.位置参数:指定的位置参数总数$#
位置参数自身$0、$1、$2、$3......
所有位置参数$@、$*
8.退出状态
echo $?
结果为0表示命令正确,结果不为0表示结果不正确
9.数字运算比较符
等于 -eq
不等于 -ne
小于 -lt
小于等于 -le
大于 -gt
大于等于 -ge
编写script.sh
script.sh /mnt/userfile /mnt/passfile
当要建立的用户已经存在不作任何操作
当脚本后所指定的文件个数少于2个
please give me userfile or passwdfile
当所给文件的行数不一致
/mnt/userfile's line is different /mnt/passwdfile's line
“ ”:字符的连接,直接用双引号
$:变量定义的时候不用,使用变量的时候一定要加上
=:赋值,两边无空格
“空格”:for中数组内容的分隔
[ ]:后面需要一个空格
[[ ]]与( ):while条件判断的时候都可以用
shell文件的写:> 是覆盖,>>是在后面追加
eg:将ll的内容写入fileName这个文件中
echo ll>>fileName
shell文件的读:while read $LINE
do
echo $LINE
done<fileName
if语句
eg:写一个脚本,判断当前所用的shell
#!/bin/bash
if
["$SHELL"="/bin/bash" ];then
echo "your login shell is the bash"
echo "SHELL is : $SHELL"
else
echo "your login is not bash but $SHELL"
fi
if语句的格式:if[ ];then
elif[ ];then
else
fi
while语句
eg:写一个脚本,求1到100的和
#!/bin/bash
SUM=0
i=1
while
[ $i -le 100 ]
do
SUM=$(($SUM + $i))
i=$(($i + 1))
done
echo "$SUM"
for语句
eg:写一个脚本,通过ping测试172.25.254.1-172.25.254.50之间所有主机是否在线
#!/bin/bash
for
i in `seq 1 1 50`
do
ping -cl -wl 172.25.$i >/dev/null
[ $? -eq 0 ] && echo "172.25.254.$i ip is up" || echo "172.25.254.$i ip is down"
done
-c是ping的次数
-w是测试的时间,-w 1就是一秒中无论成功失败都结束
-c -w后面都要输入参数所以都要带上1
/dev/null是个黑洞,写入任何东西都会丢失
expect语句
eg:#!/user/bin/expect
spawn /mnt/ask.sh spawn是expect的内部命令,给shell加个壳,用来传递交互指令
expect "who" 判断上次输出结果是否执行包含“who”,如果有立即返回,否则等到超时后返回
send "haha" 相当于手动输入“haha"
expect eof 在输出中搜索文件结束符
interact 执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了,否则退出登录