判断脚本执行两个参数是否为数字,比较大小
流程控制图表达式会有一个值,这个值用来做六成控制
[root@lb01 ~]# vim /server/scripts/1-13.sh
#!/bin/bash
num1=$1
num2=$2
[ $# -ne 2 ] && {
echo "usage: $0 "
exit
}
expr "$num1" + "$num2" + 1 &>/dev/null
[ $? -ne 0 ] && {
echo "must have two number"
exit
}
[ "$num1" -gt "$num2" ] && echo ">"
[ "$num1" -lt "$num2" ] && echo "<"
[ "$num1" -eq "$num2" ] && echo "="
[ "$num1" -ne "$num2" ] && echo "!="
判断两个参数是否为数值
expr "$num1" + "$num2" + 1 &>/dev/null
[ $? -ne 0 ] && {
echo "must have two number"
exit
expr判断参数是否为数值,是的话运算后返回值为0,如果返回值不是0就代表刚才执行的验证石是否为数值失败,说明刚才执行的参数不是纯数值
逻辑运算
[root@lb01 ~]# [ -d /etc -a -f /etc/host ] && echo "1 chengli" || echo "0 buchengli"
0 buchengli
2020年 01月 13日 星期一 09:43:40 CST
[root@lb01 ~]# [ -d /etc -a -f /etc/hosts ] && echo "1 chengli" || echo "0 buchengli"
1 chengli
[root@lb01 ~]# [ -d /etc -o -f /etc/hosts ] && echo "1 chengli" || echo "0 buchengli"
1 chengli
[root@lb01 ~]# [ -d /etc -o -f /etc/ho ] && echo "1 chengli" || echo "0 buchengli"
1 chengli
判断10-100的数字
[root@lb01 ~]# cat /server/scripts/qq.sh
#!/bin/bash
num=$1
[[ $num -ge 10 && $num -le 100 ]] && echo $num || echo "不符合条件"
[root@lb01 ~]# sh /server/scripts/qq.sh 222
不符合条件
[root@lb01 ~]# sh /server/scripts/qq.sh 22
22
判断<10 >100的数字
[root@lb01 ~]# cat /server/scripts/qq.sh
#!/bin/bash
num=$1
[[ $num -lt 10 || $num -gt 100 ]] && echo $num || echo "不符合条件"
2020年 01月 13日 星期一 09:54:10 CST
[root@lb01 ~]# sh /server/scripts/qq.sh 22
不符合条件
2020年 01月 13日 星期一 09:54:18 CST
[root@lb01 ~]# sh /server/scripts/qq.sh 2
2
2020年 01月 13日 星期一 09:54:20 CST
[root@lb01 ~]# sh /server/scripts/qq.sh 222
222
2020年 01月 13日 星期一 09:54:22 CST
[root@lb01 ~]# [[ 123 =~ ^[a-z]+$ ]] && echo 1 || echo 0
0
[root@lb01 ~]# [[ dddwdw =~ ^[a-z]+$ ]] && echo 1 || echo 0
1
[root@lb01 ~]# [[ 123 =~ ^[0-9]+$ ]] && echo 1 || echo 0
1
[root@lb01 ~]# [[ 12sdf3 =~ [0-9] ]] && echo 1 || echo 0
1
判断是否为数字1或者2
[root@lb01 ~]# cat /server/scripts/www.sh
#!/bin/bash
s=$1
#[ $s -eq 1 -o $s -eq 2 ] && echo $1 || echo "既不是1也不是2"
[[ ! "$s" =~ ^[12]$ ]] && {
echo input errpr
exit 1
}
[ "$s" -eq 1 ] && echo 1
[ "$s" -eq 2 ] && echo 2
补充:
交互式变量赋值
[root@lb01 ~]# read -p 'input passwd:' pass
input passwd:123456
2020年 01月 13日 星期一 10:47:28 CST
[root@lb01 ~]# echo $pass
123456
给多个变量赋值
[root@lb01 ~]# read -p 'input passwd:' n1 n2
input passwd:10 20
[root@lb01 ~]# echo $n1
10
[root@lb01 ~]# echo $n2
20
[root@manager ~]# cat /server/scripts/2.8-1-comp-read.sh
#!/bin/bash
#author: oldboy
read -p "input num1 num2:" num1 num2
#number
#expr $num1 + $num2 + 1 &>/dev/null
#[ $? -ne 0 ] && {
[[ "$num1" =~ ^[0-9]+$ && "$num2" =~ ^[0-9]+$ ]] || {
echo "Usage: Must have two number"
exit 2
}
#compare
[ $num1 -gt $num2 ] && echo "$num1 -gt $num2"
[ $num1 -lt $num2 ] && echo "$num1 -lt $num2"
[ $num1 -eq $num2 ] && echo "$num1 -eq $num2"
```
#ctrl + z 让进程去后台挂起 (暂停)
[root@manager ~]# sleep 666
^Z
[2]+ 已停止 sleep 666
#bg 让后台挂起的 继续运行 background
[root@manager ~]# bg
[2]+ sleep 666 &
[1] 完成 sleep 99
#查看后台运行
jobs
#应用场景:杀掉 顽固进程
##执行顽固进程
##ctrl + z
##kill %1 #数字
条件判断 检查crond服务是否开启
status状态
ps -ef进程
[root@lb01 ~]# cat /server/scripts/ding.sh
#!/bin/bash
. /etc/init.d/functions
cnt=`ps -ef|grep crond |grep -v grep |wc -l`
if [ $cnt -ge 1 ]
then
action "running" /bin/true
else
action "failed" /bin/false
fi
linux下程序是怎样执行的 顺序–分支–循环
- 先找别名—>函数—>内置命令—>外部命令
- 判别程序是个什么程序(二进制文件)按照什么程序的规则执行
- 二进制是:通过bash传给内核执行
00 如果指定怎么执行,就按照指定的方式执行
不指定,找程序中是否指定
程序没指定,就需要手动告诉他
01 sh执行文件会开启一个子shell执行
- linux默认的解释器是bash(#!/bin/bash)
02 绝对路径执行文件:将不会找别名,执行不带别名设置的规则
- 会找解释器(bash、py)
- 要给文件执行权限,和./一样,需要x权限
PATH环境变量是执行命令时找到命令或者文件的绝对路径
环境变量的顺序
for循环入门
1-100自加
do
[root@syq666 scripts]# cat 100.sh
#!/bin/bash
sum=0
for (( i=0; i<101; i++ ))
do
((sum=$sum+$i))
done
echo $sum
[root@syq666 scripts]# sh 100.sh
5050
while
[root@syq666 scripts]# cat 0100.sh
#!/bin/bash
sum=0
i=0
while (( i++<100 ))
do
((sum=$sum+$i))
done
echo $sum
[root@syq666 scripts]# sh 0100.sh
5050
多分枝比较数字大小
#!/bin/bash
#author: oldboy
read -p "input num1 num2:" num1 num2
#number
#expr $num1 + $num2 + 1 &>/dev/null
#[ $? -ne 0 ] &&
if [[ !"$num1" =~ ^[0-9]+$ || !"$num2" =~ ^[0-9]+$ ]]
then
echo "Usage: Must have two number"
exit 2
fi
if [ $num1 -gt $num2 ]
then
echo "$num1 -gt $num2"
elif [ $num1 -lt $num2 ]
then
echo "$num1 -lt $num2"
else
echo "$num1 -eq $num2"
fi
判断url
[root@manager ~]# vim /server/scripts/2.10.1-chk_url.sh
#!/bin/bash
#author:oldboy
url=$1
#url format
#使用正则之前 找出规律
#baidu.com
#www.baidu.com
#www.12306.cn
#aliyun.com
if [[ ! "$url" =~ ^[a-zA-Z.]*[a-zA-Z0-9]+\.(com|org|cn)$ ]]
then
echo "$url is not ok"
exit 1
fi
#wget url
wget -T 1 -q --spider $url
if [ $? -eq 0 ]
then
echo $url is ok
else
"/server/scripts/2.10.1-chk_url.sh" 28L, 363C 已写入
c6和c7可用内存区别
c6:free 可用内存就是free+baffer+cache
c7:available就是可用内存
测试服务器内存<100m发邮件,每三分钟执行一次
[root@manager ~]# cat /server/scripts/2.10.2-chk_mem.sh
#!/bin/bash
#author:oldboy
mem=`free -m |awk 'NR==2{print $NF}'`
if [ $mem -lt 10000 ]
then
mail -s "mem is bugoule" 918391635@qq.com </etc/hosts
fi
[root@manager ~]# sh /server/scripts/2.10.2-chk_mem.sh
[root@manager ~]# crontab -l
#check mem by liyy at 20200202
*/3 * * * * /bin/sh /server/scripts/2.10.2-chk_mem.sh &>/dev/null
C6安装rsync并启动服务
rsync端口873
- 安装
yum install rsync
- 配置(c6默认无此文件)
[root@syq666 ~]# cat /etc/rsyncd.conf
#Rsync server
#created by oldboy 15:01 2009-6-5
##rsyncd.conf start##
uid = root
gid = root
use chroot = no
max connections = 2000
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 10.0.0.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#####################################
[www]
comment = www by old0boy 14:18 2012-1-13
path = /oldboy
- 服务
启动rsync服务
netstat -lntup
关闭rsync服务
[root@syq666 ~]# kill `cat /var/run/rsyncd.pid`
脚本实现服务关闭开启
[root@oldboyedu-c6 /server/scripts]# vim rsyncd.sh
#!/bin/bash
choice=$1
if [ "$choice" = "start" ]
then
rsync --daemon
fi
if [ "$choice" = "stop" ]
then
kill `cat /var/run/rsyncd.pid`
fi
if [ "$choice" = "restart" ]
then
kill `cat /var/run/rsyncd.pid`
sleep 1
rsync --daemon
fi
~
"rsyncd.sh" [New] 20L, 254C written
[root@oldboyedu-c6 /server/scripts]#
[root@oldboyedu-c6 /server/scripts]# sh rsyncd.sh
[root@oldboyedu-c6 /server/scripts]# pkill rsyncd
[root@oldboyedu-c6 /server/scripts]# pkill rsync
[root@oldboyedu-c6 /server/scripts]# ss -lntup |grep 873
[root@oldboyedu-c6 /server/scripts]# sh rsyncd.sh start
[root@oldboyedu-c6 /server/scripts]# ss -lntup |grep 873
tcp LISTEN 0 5 :::873 :::* users:(("rsync",3936,5))
tcp LISTEN 0 5 *:873 *:* users:(("rsync",3936,3))
[root@oldboyedu-c6 /server/scripts]# sh rsyncd.sh stop
[root@oldboyedu-c6 /server/scripts]#
[root@oldboyedu-c6 /server/scripts]# ss -lntup |grep 873
[root@oldboyedu-c6 /server/scripts]# sh rsyncd.sh restart
cat: /var/run/rsyncd.pid: No such file or directory
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
[root@oldboyedu-c6 /server/scripts]#
[root@oldboyedu-c6 /server/scripts]# ss -lntup |grep 873
tcp LISTEN 0 5 :::873 :::* users:(("rsync",3947,5))
tcp LISTEN 0 5 *:873 *:* users:(("rsync",3947,3))
漏洞:
1. 开源软件: 升级 最新稳定版本
2. 商业软件: 如何打补丁
chkconfig管理脚本
[root@oldboyedu-c6 /server/scripts]# mv rsyncd.sh /etc/init.d/
[root@oldboyedu-c6 /server/scripts]# chmod +x /etc/init.d/rsyncd.sh
[root@oldboyedu-c6 /server/scripts]# ll /etc/init.d/rsyncd.sh
-rwxr-xr-x. 1 root root 342 Jan 14 15:28 /etc/init.d/rsyncd.sh
[root@oldboyedu-c6 /server/scripts]# head -2 /etc/init.d/rsyncd.sh
#!/bin/bash
# chkconfig: 2345 99 98
[root@oldboyedu-c6 /server/scripts]# chkconfig --add rsyncd.sh
[root@oldboyedu-c6 /server/scripts]# chkconfig |grep rsync
rsyncd.sh 0:off 1:off 2:on 3:on 4:on 5:on 6:off
case语句
**猜数字游戏。
首先让系统随机生成一个数字,给这个数字定一个范围(1-60),让用户输入猜的数字,对输入进行判断,如果不符合要求,就给予高或低的提示,猜对后则给出猜对用的次数。**
[root@m01 ~]# cat /server/scripts/1-15caishuzi.sh
!/bin/bash
i="$((RANDOM%60))"
count=0
Beat(){
a=0
b=0
while read line
do
if [ $line -ge $count ]
then
((a++))
else
((b++))
fi
done</tmp/count.log
echo $a $((a+b))|awk '{print ($1/$2)*100"%"}'
}
while true
do
read -p "请输入1-60数字: " num
[ $num -gt 60 ]&&{
echo "是不是傻,没看到让你输1-60的数字吗???"
continue
}
[ $num -lt 1 ] &&{
echo "是不是傻,没看到让你输1-60的数字吗???"
continue
}
expr 10 + $num &>/dev/null
[ $? -ne 0 ] &&{
echo "请输入数字,别瞎输"
continue
}
let count+=1
if [ $num -gt $i ]
then
echo -e 兄弟,输"\033[41;37m高\033[0m"了,Come on!
elif [ $num -eq $i ]
then
if [ $count -le 3 ]
then
echo -e "\033[43;32m牛逼啊,${count}次就对了,击败了全国`Beat`的人,你绝对能出任CEO,赢取白富美,走上人生巅峰\033[0m"
else
echo "用了$count 次才答对,击败了全国`Beat`的人"
fi
echo "$count" >>/tmp/count.log
exit 0
else
echo -e 兄弟,输"\033[44;37m低\033[0m"了,Come on!
fi
done