第16天 [Shell脚本编程进阶]

for循环
for 变量名 in 列表;do
循环体
done

for i in {1..3} ;do echo $i;done
	for i in {10..5} ;do echo $i;done
	for i in {10..5..2} ;do echo $i;done
	for i in `seq 10 -3 1` ;do echo $i;done
	for i in $*;do
		echo num is $i
	done
	for i in $*
	do
		echo num is $i
	done
	"$@" 独立参数
-----------------------------------------------------------
1到100的和
seq  -s"+" 1 100  |bc
100 相加
seq -s +100
declare -i sum=0
for i in {1..100}
do
	let sum+=i   --sum =sum+i
done
echo sum=$sum
-----------------------------------------------------------
echo {1..100..2} 100偶数相加
seq 1 2 100

declare sum=0
for i in {1..100}
do
        if [ $[i%2] -eq 1 ];then
                let sum+=i
                echo $i
        fi
done
echo $sum  
------------------------批量添加10个用户脚本-----------------------------------
取随机的8个字符
tr -dc '[:alnum:]' < /dev/urandom |head -c 8

--
for i in {1..10}
do
        useradd use$i                                                                      
        passwd=`tr -dc '[:alnum:]' < /dev/urandom |head -c 8`
        echo user$i:$passwd|tee -a /data/ pass.txt |chpasswd
        --echo $password  | passwd --stdin -e user$i &> /dev/null 
		passwd -e user$i 
		echo "is created"
done

删除
for j in {1..10}
do
        userdel -r use$j
        echo "is userdel"                                                                  
done

--------------------------更改文件名sh---------------------------------

dir=/data/test
cd $dir
all=`ls *.txt`
for i in $all
do
        echo $i |sed -nr 's/(.*)\..*/\1.aaa/gp'

done

ls *

--------------------------ping ip-----------------------------
第一种
ip=192.168.41
for i in {1..20}
do
        { value=`ping -c1 -w1  $ip.$i > /dev/null ;echo $?`
        #echo $value
        if [ $value -eq 0 ] ;then
        echo    $ip.$i >> /data/yping.txt && echo $ip.$i is up
        else
        echo    $ip.$i >> /data/wping.txt && echo $ip.$i is down
        fi } &                                                                                      
done

第二种
只有为true的时候才会打印出来。
ip=192.168.41
for i in {1..20}
do
        {
        if ping -c1 -w1 $ip.$i &> /dev/null ;then
                echo $ip.$i is up | tee -a /data/yesping.txt                                        
        fi
        } &
done

或者是

ip=192.168.41
for i in {1..20}
do
        {
        if ping -c1 -w1 $ip.$i &> /dev/null ;then
                echo $ip.$i is up                                                                   
        else
                echo $ip.$i is down
        fi
        } &
done


--------------------------打印99乘法表--------------------------
for i in {1..9}
do
        for j in `seq $i`
        do
                echo -e " ${j}x$i=$[j*i]\t\c"
        done
        echo iiiii                                                                                  
        #${j}X$i=$[j*i]\t\c
done

for ((i=1;i<=9;i++));
do
        for ((j=1;j<=i;j++))
        do
                echo -e "${j}*$i=$[j*i]\t\c"
        done
        echo                                                                                        
done

--------------------------打印等腰三角形---------------------
read -p "please number" line
for (( i=1;i<=line;i++))
do
        for((j=o;j<line-i;j++))
        do
                echo -e " \c"
        done
        for ((k=1;k<=i*2-1;k++))
        do
                echo -e "+\c"                                                        
        done
        echo
done

----------------------------------------------------
while condition 
do
	循环体
done


--------------------取随机数最大最小值--------------------------------
MAX=$RANDOM
i=1
MIN=$MAX
while  [ $i -lt 10 ]
do
        N=$RANDOM
        echo $N
        if [ $N -gt $MAX ];then
                MAX=$N
        elif [ $N -lt $MIN ];then
                MIN=$N
        fi
        let i++                                                                     
done
echo max=$MAX,MIN=$MIN


--------------------重启服务---------------------
SLEEPTIME=10
while true:
do
	if killall -0 php -frm &> /dev/null;then 
		true
	else
		systemctl restart php-frm &> /dev/null
		echo "at `date +"%F %T"` php-frm is restart" >> /var/log/monitor.log
	fi
	sleep $SLEEPTIME
	
done


--------------------判断随机数---------------------
N=$[ RANDOM%10+1 ]
        while read -p "input a number" num
        do
                if [ $num -eq $N ];then
                        echo ok
                        break
                elif [ $num -gt $N ];then
                        echo roo large
                else
                        echo too small                                              
                fi
        done
----------------------------------------------------
while特殊用法
echo a b c | while read x y z ; do echo $x $y $z  ;done;
echo 1 2 3 > e.txt
while read a b c ;do echo $a,$b,$c ;done < e.txt

判断df 报警
df|sed -rn '/^\/dev\/sd/p'|sed -rn 's/(^[^[:space:]]+).*([0-9]+)%.*/\1 \2/p'|sort  |while read A B
do
        if [ $B -gt 7  ];then
                echo $A warning
        elif [ $B -eq  5 ];then
                echo $A is 5
        else
                echo $A IS anquan                                                                              
        fi
done
echo $A $B

-----------------------------------------------------
函数
定义:func_test() { echo i am men ; } 
运行 func_test
删除:unset func_test
修改:再写一遍
查看:declare -F 
只对当前窗口有效。


创建一个单独存储函数的文件,在后面可以进行调用。
---------------
这种格式的可以直接调用 sh functions.sh
func_hello(){
        echo hello ;
}

echo `func_hello`  --此句可以没有


---------------
调用函数的脚本
source /scripts/functions.sh
func_hello  





num=200; func_test(){ local num=100;echo $num }
func_test 100
echo $num 200



---------------判断是否是1-9的数------------
vim functions.sh

func_num(){
        if  [ $1 -gt 1 -a $1 -lt 10 ]  ;then                                                     
                echo is 1-9 num
        else
                echo is wrong
        fi
        echo $1
}


vim num.sh
source /scripts/functions.sh
num=$1
func_num $num



---------------阶乘------------


阶乘
fact(){
	if [ $1 -eq 0 ];then 
		echo 1
	else	
		echo $[ `fact $[$1-1]`*$1 ]
	fi
}
fact $1


fork炸弹
fork炸弹是一种恶意程序,它的内部是一个不断在fork进程的无限循环,实质是
一个简单的递归程序。由于程序是递归的,如果没有任何限制,这会导致这个
简单的程序迅速耗尽系统里面的所有资源
函数实现
:(){ :|:& };:
bomb() { bomb | bomb & }; bomb


break; continue ;exit

当不存在某个ip的时候重启服务
ip a | grep 192.168.41.41 &> /dev/null
[ $? -gt 0 ] && systemctl restart keepalived  || >/dev/null

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值