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
第16天 [Shell脚本编程进阶]
最新推荐文章于 2023-03-24 09:33:33 发布