eq 等于
ne 不等于
ls 小于
gt 大于
le 小于等于
ge大于等于
== 等于
-o 或者
-a 并且
elif 再或者
else 否则
$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误
functions这个脚本是给/etc/init.d里边的文件使用的,提供了一些基础的功能,看看里边究竟有些什么。首先会设置umask,path,还有语言环境,然后会设置success,failure,warning,normal几种情况下的字体颜色。下面再看看提供的重要方法:
checkpid:检查是否已存在pid,如果有一个存在,返回0(通过查看/proc目录)
daemon:启动某个服务。/etc/init.d目录部分脚本的start使用到这个
killproc:杀死某个进程。/etc/init.d目录部分脚本的stop使用到这个
pidfileofproc:寻找某个进程的pid
pidofproc:类似上面的,只是还查找了pidof命令
status:返回一个服务的状态
echo_success,echo_failure,echo_passed,echo_warning分别输出各类信息
success,failure,passed,warning分别记录日志并调用相应的方法
action:打印某个信息并执行给定的命令,它会根据命令执行的结果来调用 success,failure方法
strstr:判断1是否含有2
confirm:显示 “Start service $1 (Y)es/(N)o/(C)ontinue? [Y]”的提示信息,并返回选择结果
[root@web01 ~]# vim ping.sh +9
#!/bin/bash
. /etc/init.d/functions
ping -c 1 -w 1 "$1" &>/dev/null
if [ $? -eq 0 ];then
action "$1" /bin/true
else
action "$1" /bin/false
fi
[root@web01 ~]# mv ping.sh /usr/bin/p
[root@web01 ~]# chmod u+x /usr/bin/ping.sh
[root@web01 ~]# p 10.0.0.7
10.0.0.7 [ OK ]
#修改打印信息
#!/bin/bash
. /etc/init.d/functions
ping -c 1 -w 1 "$1" &>/dev/null
if [ $? -eq 0 ];then
echo $1:网络正常
else
echo $1:网络不通
fi
[root@web01 ~]# p 10.0.0.31
10.0.0.31:网络正常
#!/bin/bash
id nginx &>/dev/null # echo $? 结果转化为数字
if [ $? -ne 0 ];then
useradd nginx -s /sbin/nologin -M
echo nginx用户不存在,正在创建...
eles
echo nginx用户已存在
fi
命令行判断指定路径下的文件或者目录是否存在
[root@oldboy opt]# [ -d /op ]&& echo 存在||echo 不存在
不存在
[root@oldboy opt]# [ ! -d /op ]&& echo 不存在||echo 存在
不存在
[ -d /op ] || xx 前面不成功,后面执行xx,,,成功了就啥也不干
[ -d /op ] && xx 前面成功了,后面执行xx,,,不成功就啥也不干
运行脚本里判断指定路径下的文件或者目录是否存在
#!/bin/bash
if [ -d /root ];then
echo 存在
else
echo 不存在
fi
#!/bin/bash
if [ -f /syy ];then
echo 存在
else
echo 不存在
fi
命令行里使用if判断
[root@lb01 ~]# if [ -d /etc ];then echo 1 ;else echo 2;fi
1
[root@lb01 ~]# if [ -d /etcc ];then echo 1 ;else echo 2;fi
2
#判断/syy 目录或文件是否存在
[root@oldboy ~]# vim a.sh
#!/bin/bash
. /etc/init.d/functions
if [ -d /root/syy ];then
action '该目录已存在' /bin/true
else
action '该目录不存在' /bin/false
fi
[root@oldboy ~]# sh a.sh
该目录已存在 [ OK ]
跳板机
#自动切换终端脚本,脚本不认识别名(ll),判断里面不能接 >/dev/null,不然会夯住
vim QH.sh
#脚本1
#!/bin/bash
cat <<EOF
+------------+
|1.连接web01 |
+------------+
|2.连接web02 |
+------------+
|3.连接nfs |
+------------+
|4.连接backup|
+------------+
EOF
read -p '请输入想要连接的虚拟机的序号:' num
if [ $num -eq 1 ];then
ssh root@172.16.1.7
elif [ $num -eq 2 ];then
ssh root@172.16.1.8
elif [ $num -eq 3 ];then
ssh root@172.16.1.31
elif [ $num -eq 4 ];then
ssh root@172.16.1.41
fi
# if [ $num -eq 1 -o $num == web01 ];then 不能这样写
#脚本2
#!/bin/bash
cat <<EOF
+------------+
|1.连接web01 |
+------------+
|2.连接web02 |
+------------+
|3.连接nfs |
+------------+
|4.连接backup|
+------------+
EOF
read -n1 -p "请输入想要连接的虚拟机的序号: " answer
case $answer in
1)
ssh root@172.16.1.7;;
2)
ssh root@172.16.1.8;;
3)
ssh root@172.16.1.31;;
4)
ssh root@172.16.1.41;;
esac
exit 0
#脚本3
vim jumpserver.sh
#!/bin/bash
#jumpserver
lb01=172.16.1.5
lb02=172.16.1.6
web01=172.16.1.7
web02=172.16.1.8
web03=172.16.1.9
nfs=172.16.1.31
backup=172.16.1.41
db01=172.16.1.51
db02=172.16.1.52
db03=172.16.1.53
db04=172.16.1.54
m01=172.16.1.61
zabbix=172.16.1.71
cat <<EOF
+-------------------------+
| 1) lb01 |
| 2) lb02 |
| 3) web01 |
| 4) web02 |
| 5) web03 |
| 6) nfs |
| 7) backup |
| 8) db01 |
| 9) db02 |
| 10) db03 |
| 11) db04 |
| 12) m01 |
| 13) zabbix |
| h) help |
+-------------------------+
EOF
read -p 'Please Input Number: ' num
if [ $num -eq 1 ];then
ssh root@$lb01
elif [ $num -eq 2 ];then
ssh root@$lb02
elif [ $num -eq 3 ];then
ssh root@$web01
elif [ $num -eq 4 ];then
ssh root@$web02
elif [ $num -eq 5 ];then
ssh root@$web03
elif [ $num -eq 6 ];then
ssh root@$nfs
elif [ $num -eq 7 ];then
ssh root@$backup
elif [ $num -eq 8 ];then
ssh root@$db01
elif [ $num -eq 9 ];then
ssh root@$db02
elif [ $num -eq 10 ];then
ssh root@$db03
elif [ $num -eq 11 ];then
ssh root@$db04
elif [ $num -eq 12 ];then
ssh root@$m01
elif [ $num -eq 13 ];then
ssh root@$zabbix
fi