标签:Shell
Shell[root@nfs01 scripts]# [ -f /etc/hosts ] && echo "file true" || echo "file fleas"
file true
[root@nfs01 scripts]# [ -f /etc/hostaaas ] && echo "file true" || echo "file fleas"
file fleas
[root@nfs01 scripts]# [ -d /etc/ ] && echo "yes" || echo "no"
yes
[root@nfs01 scripts]# [ -d /essstc/ ] && echo "yes" || echo "no"
no
[root@nfs01 scripts]# [ -d /etc/ ]
[root@nfs01 scripts]# echo $?
0
常用文件测试操作符 | 说明 |
-d文件,d的全拼为directory | 文件存在且为目录则为真,即测试表达式成立 |
-f文件,f的全拼为file | 文件存在且为普通文件则为真,即测试表达式成立 |
-e文件,e的全拼为exist | 文件存在则为真,即测试表达式成立。注意区别于“-f”,-e不辨别是目录还是文件 |
-r文件,r的全拼为read | 文件存在且可读则为真,即测试表达式成立 |
-s文件,s的全拼为size | 文件存在且文件大小不为0则为真,即测试表达式成立 |
-w文件,w的全拼为write | 文件存在且可写则为真,即测试表达式成立 |
-x文件,x的全拼为executable | 文件存在且可执行则为真,即测试表达式成立 |
-L文件,L的全拼为link | 文件存在且为链接文件则为真,即测试表达式成立 |
fl -nt f2,nt 的全拼为 newer than | 文件fl比文件f2新则为真,即测试表达式成立。根据文件的修改时间来计算 |
fl -ot f2,ot 的全拼为 older than | 文件fl比文件f2旧则为真,即测试表达式成立。根据文件的修改时间来计算 |
常用字符串测试操作符 | 说明 |
-n "字符串" | 若字符串的长度不为0,则为真,即测试表达式成立,n可以理解为no zero |
-Z "字符串" | 若字符串的长度为0,则为真,即测试表达式成立,z可以理解为zero的缩写 |
"串 1"== "串 2" | 若字符串1等于字符串2,则为真,即测试表达式成立,可使用"=="代替"=" |
"串 1" != "串 2" | 若字符串1不等于字符串2,则为真,即测试表达式成立,但不能用"!=="代替"!=" |
-z 表示字符传为0
-n 表示不为0
[root@nfs01 scripts]# $date_cmd
2018-03-23
[root@nfs01 scripts]# [ -z "$date_cmd" ] && echo yes || echo no
no
[root@nfs01 scripts]# [ -n "$date_cmd" ] && echo yes || echo no
yes
[root@nfs01 scripts]# x=1
[root@nfs01 scripts]# y=2
[root@nfs01 scripts]# [ "$x" = "$y" ]
[root@nfs01 scripts]# echo $?
1
[root@nfs01 scripts]# [ "$x" = "$y" ] && echo yes ||echo no
no
[root@nfs01 scripts]# [ "$x" != "$y" ] && echo yes ||echo no
yes
在[]以及test中 使用的比较符号 | 在(())和[[]]中 使用的比较符号 | 说明 |
-eq | ==或= | 相等,全拼为equal |
-ne | != | 不相等,全拼为not equal |
-gt | > | 大于,全拼为greater than |
-ge | >= | 大于等于,全拼为greater equal |
-lt | < | 小于,全拼为丨ess than |
-le | <= | 小于等于,全拼为less equal |
[root@nfs01 scripts]# [ 2 -eq 2 ] && echo yes ||echo no 等于
yes
[root@nfs01 scripts]# [ 2 -ne 2 ] && echo yes ||echo no 不等于
no
[root@nfs01 scripts]# [ 3 -ge 2 ] && echo yes ||echo no 大于等于
yes
[root@nfs01 scripts]# [ 1 -gt 2 ] && echo yes ||echo no 大于
no
[root@nfs01 scripts]# [ 4 -lt 1 ] && echo yes ||echo no 小于
no
[root@nfs01 scripts]# [ 4 -lt 7 ] && echo yes ||echo no 小于等于
yes
[root@nfs01 scripts]# [ 4 -lt 7 -a 3 -ge 2 ] && echo yes ||echo no
yes
[root@nfs01 scripts]# [ 24 -lt 7 -o 3 -ge 1 ] && echo yes ||echo no
yes
[root@nfs01 scripts]# [ 2 -lt 7 -o ! 3 -ge 1 ] && echo yes ||echo no
yes
[root@nfs01 scripts]# cat bianliang.sh
#!/bin/bash
##############################################################
# File Name: bianliang.sh
# Version: V1.0
# Author: da ya
# Organization: 850144102@qq.com
# Created Time : 2018-03-23 09:15:12
# Description:
##############################################################
x=1
y=2
[ $x -eq $y ] && echo x=y && exit 2
[ $x -gt $y ] && echo x>y && exit 2
echo x\<y
[root@nfs01 scripts]# vim duibi.sh
#!/bin/bash
##############################################################
# File Name: duibi.sh
# Version: V1.0
# Author: da ya
# Organization: 850144102@qq.com
# Created Time : 2018-03-23 03:51:37
# Description:
##############################################################
[ $# -ne 2 ] && echo "please input two num" && exit
expr $1 + 1 >/dev/null
[ $? -ne 0 ] && echo "please input zhengshu" && exit
expr $2 + 1 >/dev/null
[ $? -ne 0 ] && echo "please input zhengshu" && exit
[ $1 -eq $2 ] && echo "num1 = num2" && exit
[ $1 -gt $2 ] && echo "num1 > num2" && exit
echo "num1 < num2"
[root@nfs01 scripts]# cat daxiao_1.sh
#!/bin/bash
##############################################################
# File Name: daxiao.sh
# Version: V1.0
# Author: da ya
# Organization: 850144102@qq.com
# Created Time : 2018-03-22 20:10:36
# Description:
##############################################################
read -p "please input num1:" num1
read -p "please input num2:" num2
if expr $num1 + 1 >/dev/null 2>&1;then echo 1 >/dev/null;else echo "please input zhengshu" && exit;fi
if expr $num2 + 1 >/dev/null 2>&1;then echo 1 >/dev/null;else echo "please input zhengshu" && exit;fi
[ $num1 -eq $num2 ] && echo num1=num2 && exit 2
[ $num1 -gt $num2 ] && echo num1\>num2 && exit 3
[ $num1 -lt $num2 ] && echo num1\<num2 && exit 4
[root@nfs01 scripts]# cat duibi_if.sh
#!/bin/bash
##############################################################
# File Name: duibi.sh
# Version: V1.0
# Author: da ya
# Organization: 850144102@qq.com
# Created Time : 2018-03-23 03:51:37
# Description:
##############################################################
if [ $# -ne 2 ];then
echo "please input two num"
exit
elif expr $1 + 1 >/dev/null 2>&1
if [ $? -ne 0 ];then
echo "please input zhengshu"
exit
fi
expr $2 + 1 >/dev/null 2>&1
if [ $? -ne 0 ];then
echo "please input zhengshu"
exit
fi
if [ $1 -eq $2 ];then
echo "num1 = num2"
elif [ $1 -gt $2 ];then
echo "num1 > num2"
else
echo "num1 < num2"
fi
1. 分析你的需求
清除自己为什么写这个脚本,要用这个脚本达到什么目的
2. 设计思路
根据自己的需求,进行拆解,分步骤实现:
例如本题,我要先查看系统内存
然后利用第三方发送邮件
在系统内存低于多少时自动发送邮件
编写shell脚本
写入定时任务
3. 编码实现
[root@nfs01 scripts]# cat free.sh
#!/bin/bash
##############################################################
# File Name: free.sh
# Version: V1.0
# Author: da ya
# Organization: 850144102@qq.com
# Created Time : 2018-03-22 20:33:10
# Description:
##############################################################
name=`free -m|awk 'NR==2{print $4}'`
date_cmd='date +%F-%s'
if [ $name -gt 50 ];then
exit
else
echo "`${date_cmd}` free is no space" >/tmp/free.log
mail -s "free is no" 15555513217@163.com </tmp/free.log
fi
1. 首先要判断命令输入是否正确,如果不正确进行提示
2. 在执行脚本后输入优雅提示
3. 在启动时,判断端口是否存在,如果存在输出已经启动的信息然后退出
4. 停止时,直接pkill nginx即可
5. 重启服务时,判断进程是否存在,如果存在直接reload,如果不存在直接启动
[root@nfs01 scripts]# cat nginx.sh
#!/bin/bash
##############################################################
# File Name: nginx.sh
# Version: V1.0
# Author: da ya
# Organization: 850144102@qq.com
# Created Time : 2018-03-23 00:50:54
# Description:
##############################################################
. /etc/init.d/functions
start_cmd='/application/nginx/sbin/nginx'
stop_cmd='pkill nginx'
restart_cmd='/application/nginx/sbin/nginx -s reload'
#port_cmd='ss -tunlp|grep 80|wc -l'
if [ $# -ne 1 ];then
echo "please input $0 start|stop|restart"
exit
fi
if [ $1 = start ];then
if [ `ss -tunlp|grep 80|wc -l` -eq 1 ];then
action 'nginx is alrealy started' /bin/true
else
$start_cmd
action 'nginx is started' /bin/true
fi
fi
if [ $1 = stop ];then
$stop_cmd
action 'nginx is stoped' /bin/true
fi
if [ $1 = restart ];then
if [ `ss -tunlp|grep 80|wc -l` -eq 1 ];then
$restart_cmd
action 'nginx restarted success' /bin/true
else
$start_cmd
action 'nginx started success' /bin/true
fi
fi
1. 查看进程是否存在,不存在则进行重启
2. 检查端口是否存在
3. 如果存在,访问网站首页,判断是否正常,取http响应报文中的返回值,并判断是否为200
[root@nfs01 scripts]# vim monitor.sh
# File Name: monitor.sh
# Version: V1.0
# Author: da ya
# Organization: 850144102@qq.com
# Created Time : 2018-03-23 10:00:25
# Description:
##############################################################
date_cmd=`date +%F-%s`
start_cmd='/application/nginx/sbin/nginx'
stop_cmd='pkill nginx'
restart_cmd='/application/nginx/sbin/nginx -s reload'
ps=`ps -ef|grep [n]ginx|wc -l`
port_cmd=`ss -tunlp|grep 80|wc -l`
curl_cmd=`curl -s -I 10.0.0.31 -w "%{http_code}\n" -o /dev/null`
if [ "$ps" -ne 2 ];then
$start_cmd
if [ "$port_cmd" -ne 1 ];then
$stop_cmd
sleep 2
$start_cmd
if [ "$curl_cmd" -ne 200 ];then
echo -e "$date_cmd\n$curl_cmd"|mail -s "web service failed" 15555513217@163.com
fi
fi
fi
1. 查看端口是否存在,如果不存在则重新启动服务
2. 使用set命令和get命令进行写入和读取数据,缓存服务是否正常
3. 如果get不到数据则提示,memcache服务可能出现异常
case "字符串变量" in
值1)
指令1
;;
值2)
指令2
;;
值*)
指令
esac
apple)
echo -e "$RED_COLOR apple $RES"
;;
还可以这样写,输入2种格式找同一个选项
apple|APPLE)
echo -e "$RED_COLOR apple $RES"
;;
使输入1时显示红色apple单词
输入2时显示绿色pear单词
输入3时显示×××banana单词
输入4退出
[root@nfs01 scripts]# cat xuanze.sh
#!/bin/bash
##############################################################
# File Name: xuanze.sh
# Version: V1.0
# Author: da ya
# Organization: 850144102@qq.com
# Created Time : 2018-03-23 15:23:15
# Description:
##############################################################
cat <<END
============
1.apple
2.pear
3.banana
4.exit
============
END
read -p "please input num:" num
case $num in
1)
echo -e "\033[41;37m apple \033[0m"
;;
2)
echo -e "\033[42;37m pear \033[0m"
;;
3)
echo -e "\033[43;37m banana \033[0m"
;;
4)
exit
;;
*)
echo -e "\033[47;30m Usage: input { 1|2|3|4 } \033[0m"
;;
esac
1. 判断rsync的主配置文件是否存在,存在继续,不存在则退出
2. 判断873端口是否存在,如果存在表示服务正在运行,则退出,不存在则启动服务
3. 使只有输入start|stop|restart选项时,脚本才会执行,否则报错,显示使用规则
[root@nfs01 scripts]# cat backup.sh
#!/bin/bash
##############################################################
# File Name: rsync.sh
# Version: V1.0
# Author: da ya
# Organization: 850144102@qq.com
# Created Time : 2018-03-23 15:56:02
# Description:
##############################################################
. /etc/init.d/functions
if [ ! -f /etc/rsyncd.conf ];then
action 'rsyncd.conf not exists' /bin/false
exit
fi
start_cmd='rsync --daemon'
stop_cmd='pkill rsync'
port_cmd=`ss -tunlp|grep 873|wc -l`
case $1 in
start)
if [ "$port_cmd" -eq 2 ];then
action 'rsync service is already exists' /bin/true
exit
else
$start_cmd
action 'rsync started' /bin/true
fi
;;
stop)
$stop_cmd
action 'rsync stoped' /bin/true
;;
restart)
$stop_cmd
action 'rsync stoped' /bin/true
sleep 1
$start_cmd
action 'rsync started' /bin/true
;;
*)
echo 'Please Usage: {start|stop|restart}'
esac
[root@oldboy scripts]# sh menu.sh
1.[install lamp]
2.[install lnmp]
3.[exit]
pls input the num you want:
1、当用户输入1时,输出“start installing lamp.提示”然后执行/server/scripts/lamp.sh,脚本内容输出"lampis installed"后退出脚本,工作中就是正式lamp一键安装脚本;
echo 'echo lampis installed' > /server/scripts/lamp.sh
chmod +x /server/scripts/lamp.sh
2、当用户输入2时,输出“start installing lnmp.提示” 然后执行/server/scripts/lnmp.sh输出"lnmpis installed"后退出脚本,工作中就是正式lnmp一键安装脚本;
echo 'echo lnmpis installed' > /server/scripts/lnmp.sh
chmod +x /server/scripts/lnmp.sh
3、当输入3时,退出当前菜单及脚本;
4、当输入任何其它字符,给出提示“Input error”后退出脚本;
5、要对执行的脚本进行相关的条件判断,例如:脚本文件是否存在,是否可执行等判断。
[root@nfs01 scripts]# cat menu.sh
#!/bin/bash
##############################################################
# File Name: menu.sh
# Version: V1.0
# Author: da ya
# Organization: 850144102@qq.com
# Created Time : 2018-03-23 20:29:43
# Description:
##############################################################
. /etc/init.d/functions
cat <<END
=================
1.[install LAMP]
2.[install LNMP]
3.[exit]
=================
END
read -p "please input the num you want:" num
lamp='/server/scripts/lamp.sh'
lnmp='/server/scripts/lnmp.sh'
case $num in
1)
if [ -x "$lamp" ];then
echo 'start instaling LAMP'
$lamp >/dev/null 2>&1
action 'lamp is installed' /bin/true && exit
else
exit
fi
;;
2)
if [ -x "$lnmp" ];then
echo "start instaling LNMP"
$lnmp >/dev/null 2>&1
action "lnmp is installed" /bin/true && exit
else
exit
fi
;;
3)
exit
;;
*)
echo "Input Error!" && exit
;;
esac
sh -x 脚本.sh
-x 开启脚本调试模式
cat -A 文件.txt
-A 查看文件的隐藏字符
<<EOF
内容
EOF
一行注释方法 → : '内容'
段注释方法 ↓
:'
http://blog.znix.top
'
标签:Shell
原文地址:http://blog.51cto.com/13520772/2091669