SHELL脚本
第一行写#!/bin/bash表示的是执行脚本所用的shell的版本,执行时默认调用子进程来完成。
强弱引用
1.echo " " ##弱引用
2.echo ' ' ##强引用
3.echo -e "\n" ##使的\n有换行的能力
4.echo \# \* \$HOME ##\为转义字符(可以转义变量)
弱引用不会使变量(包括$*和``)失效
而强引用则会使变量失效
变量的使用
a=${HOME} ##{}:标出一个变量与其他字段分开也可一修改变量内容
b=$(date +%H-%M-%S) ##():先让()内的命令执行,执行完后在将结果赋值(产生的结果为多行使,b会变成数组)
数值的处理
- $[5-6]
- ((i+=j)) ##用于写等式很方便
- ((min=i/60)) ##min=$(($i/60))也行
参数的应用
- $0 $1 $2 $3 .. ##脚本后面跟的参数
- $# ## 参数的个数
- $@ ##所有参数的内容
- $* ##所有参数的内容
交互式输入
- read -p"..." NAME##输入内容至NAME,...为提示
- read -s NAME ##用于密码输入
赋值运算符
- =,+=,-=,++,--(+,-,*,/,%)
逻辑运算符
- eq(==,=),ne(!=),!,gt,ge,lt,le ##相等,不等,取反,大于,大于等于,小于,小于等于
脚本语法
1.for in系列
for num in {1..10} ##num取值1-10
do
echo $num
done
for num in $((seq 1 10)) ##num取值1-10
do
echo $num
done
2.经典for循环
for ((i=0;i<10;i++)) ##C语言for循环类型
do
echo $i
done
3. while循环
while [ -z "$?" ]
do
done
4. if
if [ "$1" == "1" ]; then ##if语句
echo hello
elif [ "$1" == "2" ];then
echo world
else
echo hello world
fi
5.case
case $1 in ##case开关语句
hello)
echo world
;;
world)
echo hello
;;
*)
echo ERROR
;;
esac
环境变量
1.用户的环境变量
vim ~/.bash_profile ##将a升级为这个用户的环境变量
export a=1
2.系统级环境变量(两种都可以)
- vim /etc/profile ##将a升级为系统环境变量
export a=1
- vim /etc/bashrc
export a=1
自动应答脚本
yum install expect ##安装自动应答器
#!/usr/bin/expect ##需要将文件加入执行权限
set USER [ lindex $argv 0 ]
set PASS [ lindex $argv 1 ]
set IP [ lindex $argv 2 ]
spawn ./ssh.sh ##该脚本会自动回答本目录下的ssh.sh(要有执行权限)
expect {
"Are you sure"{ send "yes\r"; exp_continue }
"username" { send "$USER\r"; exp_continue }
"password" { send "$PASS\r"; exp_continue }
"ipaddr" { send "$IP\r"; exp_continue }
}
interact ##回答完后停留在里面
小技巧:
- cat filename|wc -l ##查看filename的行数
- sed -n 5p filename ##查看filename的第五行
- echo $passwd |passwd --stdin user1 ##将$passwd作为user1的密码
- ifconfig|sed -n 2p |cut -d ' ' -f 10 ##IP地址