shell脚本编写知识2


数值运算工具:

整数运算工具expr a + b ( + - * / % 加 减 乘 除取商 除取余)
    $[1+1]其中直接写就可以 或$(())
   x=1 y=2
   echo $[x+y] #( 变量直接写进其中就可以)
   let 运算之后不回显结果let( i++ i=i+1 i-- i=i-1
    i+=3 i=i+3
    i-- i=i-1 i=2 i=i2
    i/=2 i=i/2 )
   x=2
   let x=x+8
   echo $x
小数运算:bc进入到计算机(除的时候要控制小数点的位数scale)
   echo “scale=2;2.2+3;3.3+3” | bc .20
   非交互式的多个计算用;隔开以“”引起来
   逻辑判断:echo “1>2” | bc (0)
   echo “4>2” | bc (1)
   echo “4==4” | bc (1) 

判断:
echo $RANDOM(输出的为随机数)
[ 判断表达式 ] (注意空格) test 判断表达式
   字符判断:
   是否相等?[ ‘a’ == ‘a’ ]判断a是否等于a; (查看echo $?)
   是否不等于?[ ‘a’ != ‘b’ ]判断a是否不等于b (查看echo $?)
   判断变量的值是否为空?[ -z $abc ]判断abc的值是否为空 ...
判断变量的值是否不为空[ !-z $abc ]判断abc是否不为空 ...
   ****在linux中一行如何打多条命令
   A;B 执行A,执行B
   A&&B 执行A,仅当A成功才执行B (且)
   A||B 执行A,仅当A失败才执行B (或)
   
   数字判断:
   -eq 等于 equal
   -ne 不等于 not equal
   -gt 大于 greate than
   -ge 大于等于
   -lt 小于 less than
   -le 小于等于
   
例:
   1.每分钟检测放前计算机登陆 用户的数量如果大于2,则发送邮件报警
   crontab -e
   
/1.sh
   2.vim /1.sh
   #!/bin/bash
   Num=who | wc -l
   [ $num -gt 2 ] && mail -s www root < a.txt
   3.mkdir /a.txt
   echo 后院失火 | /a.txt
   
   文件或目录判断:
   -e判断是否存在 exist
   -f判断存在,且为文件file
   -d判断存在,且为目录dir
   -r判断是否可读read
   -w判断是否可写write
   -x判断是否可执行excute
if判断:
ping -i(指定两次之间的间隔时间)-W(指定等待时间)-c(指定次数)
单分支if(仅判断对)
if [ 判断 ];then
命令
fi

双分支if判断
if [ 判断 ];then
命令
else
失败
fi

大于等于90 神功绝世
  大于等于80,小于90 登峰造极
  大于等于70,小于80 炉火纯青
  大于等于60,小于70 略有小成
  小于60 初学乍练

例1:(运行脚本测试ip地址师傅可以ping通)
#!/bin/bash
read -p "请输入IP地址:" ip
ping -i0.1 -W1 -c4 $ip &> /dev/null
if [ $? -eq 0 ];then
echo "该IP地址通"
else
echo "该IP地址不通"
fi
~

例2:(运行脚本检查80端口是否开启在运行)
#!/bin/bash
netstat -anput | grep :80 &>/dev/null
if [ $? -eq 0 ];then
echo 80端口已经启动
else
echo 80端口没有启动
fi

例3:(运行脚本检查httpd的软件包是否安装)
rpm -qa |grep httpd &>/dev/null
if [ $? -eq 0 ];then
echo "该软件包已经安装"
else
echo "该软件包没有安装"
fi

例4:(运行脚本运用if判断不同分值范围的而实现输出修炼结果的不通)
#!/bin/bash
echo " 人界修炼等级榜
(此法宝为消耗品只可以使用100) "
for i in {1..100}
do
read -p "

    请输入道要查阅的道号:" name

read -p " 请输入测试石显示的整数测试积分:" jf
if [ $jf -gt 100 ];then
echo "
$name:人界系统权限不足无法查看详细等阶请查看仙界等阶榜"
elif [ $jf -ge 100 ];then
echo "
$name:的目前修炼等阶为大乘期"
elif [ $jf -ge 90 ];then
echo "
$name:的目前修炼等阶为元婴期"
elif [ $jf -ge 80 ];then
echo "
$name:的目前修炼等阶为金丹期"
elif [ $jf -ge 70 ];then

echo "
$name:的目前修炼等阶为筑基期 "
elif [ $jf -ge 60 ];then
echo "
$name:刚刚步入修炼为炼气期 "
elif [ $jf -gt 0 ];then
echo "
$name:为一凡人尚未开始修炼 "
else
echo "
$name:人界等阶榜查无此人请查看冥界等阶榜"
fi
done

shell循环介绍:

for循环:
for 变量名 in 值列表
do
命令序列
done

seq使用:
echo {不能使用变量} seq $X (后面可以使用变量)
echo {5..10} == seq 5 10(输出为5到10)
seq 5 (输出为1到5)

例:实现自动检查172.40.51.100到172.40.51.200之间能否ping通

#!/bin/bash
a=0
b=0
for i in seq 100 200
do
ping -c1 -i0.1 -W1 172.40.51.$i &>/dev/null
if [ $? -eq 0 ];then
echo “172.40.51.$i is up”
let a++
else
echo “172.40.51.$i is down”
let b++
fi
done
echo "开机的有$a 个,关机的有$b 个"

2.计算1+2+3+4。。。+100的和(expr echo | bc let <let 在计算变量是不显示出来的>)
#!/bin/bash
x=0
for i in {1..100}
do
let x+=i
done
echo $x
~
3.将/var/log每个文件,单独打包,保存到/tmp

#!/bin/bash
#x=find /var/log -type f
for i in ls /var/log
do
tar -zcf /tmp/$i.tar.gz $i
done

while循环:

while [ 条件测试]
do
命令序列
done
例: i=1
while [ $i -lt 10 ]
do
echo “nihao”
let i++
done

死循环
while :
do
命令序列
done

case判断语句:(简化的if,每一个语句的结束都以;;结束《 )中写匹配条件》 )
case $1 in
redhat)
echo “fedora”;;
fedora)
echo “redhat”;;
*)
echo “Usage”
Esac

case "$1" in
-n)
touch "$2" ;;
-e)
vim "$2" ;;
-c)
cat "$2" ;;
-r)
rm -rf "$2" ;;
*)
echo "Usage :$0 (-n|-e|-c|-r)文件名"
esac

Shell脚本的函数:
(给一堆代码取个别名)

定义函数
函数名(){
命令
}
调用函数:函数名
<直接在命令行书写就可以>
例:
mymkdir(){
mkdir /a
mkdir /b
}
执行:mymkdir(在根下创建目录为a和b)
只是当时有效,放在/etc/profile下是永久有效
mymkdir(){
mkdir /$1
}
执行:mymkdir aaa(创建一个目录在根下为aaa)

echo -e “\033[ 32mOK\033[0m”

(extend扩展echo的功能,扩展一个颜色,为32的颜色,改变的我OK的颜色,改回0的颜色<0没有颜色> 同时指定用分号隔开<例:~[ 32;44mOK\033[0m>)
3x 是字体颜色4X为背景颜色x为样式
cecho(){
echo -e "\033["$1"m"$2"\033[0m"
}

cecho 32 OK
cecho 33 Error
cecho 34 Warning

echo -n(不另起一行)

中断与退出:
Break(中断整个循环体)continue(中断本次循环进入下一次循环)exit(中断整个脚本)
可以给for和while
例:
for i in {1..5}
do
[ $i -eq 3 ] && break
echo $i
done
echo OK
(输出的为1 2 OK)

for i in {1..5}
do
[ $i -eq 3 ] && continue
echo $i
done
echo OK
(输出的为1 2 4 5 OK)

for i in {1..5}
do
[ $i -eq 3 ] && exit
echo $i
done
echo OK
(输出的为1 2 )

for i in {1..254}
do
[ $i -eq 3 ] && continue
ssh 192.168.4.$i “poweroff”
done
#如本机的ip为192.168.4.3

#!/bin/bash
b=0
while :
read -p "请输入一个整数:" a
do
[ -z $a ] && break
let b=b+$a
done
echo 此次计算的总和为"$b"

转载于:https://blog.51cto.com/13404755/2050386

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值