Bash
Linux 的 Shell 种类众多,这里用的Shell环境是bash(Bourne Again Shell(/bin/bash))
脚本第一行一般是这样:
#!/bin/bash
同时,Bash 也是大多数Linux 系统默认的 Shell。
在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash。
#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序
一、变量定义
key=value的形式,例如
version="2.0.2"
Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m"
gitFlag=0 # 重试标识,flag=0 表示任务正常,flag=1 表示需要进行重试
字色 背景 颜色
30 40 黑色
31 41 紅色
32 42 綠色
33 43 黃色
34 44 藍色
35 45 紫紅色
36 46 青藍色
37 47 白色
二、变量引用
Info="${Green_font_prefix}[信息]${Font_color_suffix}"
Error="${Red_font_prefix}[错误]${Font_color_suffix}"
Tip="${Green_font_prefix}[注意]${Font_color_suffix}"
echo -e "${Info} 请输入${Green_background_prefix} ${Red_font_prefix}gitlab账号/密码 ${Font_color_suffix}来拉取最新代码。"
三、while/if 以及读取操作结果
while [ ${gitFlag} -eq 0 ]
do
result=`git pull` #读取操作结果
if [ "${result:-0}" == 0 ]; #判断操作结果,执行失败则返回0
then
echo -e "${Error}${Red_font_prefix} 密码错误,请重试${Font_color_suffix}"
gitFlag=0
else
gitFlag=1
break;
fi
done
四、退出
shell一般是需要手动退出的,所以在不需要再执行操作的时候执行↓
exit 1
五、expect
这是expect使用的例子,多用于自动填写密码等,比如输入root密码:
set timeout 10
expect -c "
spawn su - root
expect \"密码:\"
send \"123456\n\"
interact"
或者scp命令:
target="x.x.x.x(这是目标ip)"
floder="/usr/local/nginx/html"
password="这是密码"
echo -e "${Info} 正在${Green_background_prefix} ${Red_font_prefix}部署 ${Font_color_suffix}"
expect <<EOF
set timeout 10
spawn scp -r ../files root@${target}:${floder}
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "${password}\n" }
}
expect "password" { send "${password}\n" }
EOF
echo -e "${Info} ${Green_background_prefix}${Red_font_prefix}部署完成${Font_color_suffix}"
shell执行速度快,必要时需延迟处理 set timeout
六、其他事项
因为执行bash是在子shell中执行,所以cd命令不会对父shell生效
需要生效则使用:
. ./example.sh
或者
source ./example.sh
————————————————————————————