shell判断---逻辑运算---条件表达

判断脚本执行两个参数是否为数字,比较大小

流程控制图表达式会有一个值,这个值用来做六成控制
在这里插入图片描述

[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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值