whileループステートメント
whileループ構文構造
while 表达式
do
command...
done
while [ 1 -eq 1 ] 或者 (( 2 > 1 ))
do
command
command
...
done
当条件测试成立(必须为真),返回值为0才能执行循环体
アプリケーション
1〜100個の偶数の合計を計算します
#!/bin/bash
#定义变量
sum=0
i=2
while [ $i -le 100 ]
do
let sum=$sum+$i
let i+=2
done
echo "1-100的偶数和为:$sum"
# for
#!/bin/bash
sum=0
for ((i=0;i<=100;i+=2))
do
let sum=$sum+$i
done
echo "1-100的偶数和为:$sum"
システム時刻を同期する
- システム時刻を30秒ごとに同期するスクリプトと、時刻同期サーバー192.168.188.188を記述します。
- 同期が失敗した場合、電子メールアラームが送信され、失敗するたびにアラームが送信されます
- 同期が成功すると、電子メールでも通知されますが、通知されるのは100回に1回だけです。
#!/bin/bash
# 该脚本用于时间同步
NTP=10.1.1.1
count=0
while true
do
ntpdate $NTP &>/dev/null
if [ $? -ne 0 ];then
echo "system date failed" |mail -s "check system date" root@localhost
else
let count++
if [ $count -eq 100 ];then
echo "systemc date success" |mail -s "check system date" root@localhost && count=0
fi
fi
sleep 30
done
直角三角形
#!/bin/bash
read -p "请输入三角形的高:" h
i=1
while [ $i -le $h ]
do
j=1
while [ $j -le $i ]
do
echo -n "*"
let j++
done
echo
let i++
done
二等辺三角形
#!/bin/bash
read -p "请输入三角形的高:" h
i=1
while [ $i -le $h ]
do
a=$[ $h - $i ]
j=1
while [ $j -le $a ]
do
echo -n " "
let j++
done
b=$((2*$i - 1 ))
k=1
while [ $k -le $b ]
do
echo -n "*"
let k++
done
echo
let i++
done
逆二等辺三角形
#!/bin/bash
read -p "请输入三角形的高:" h
i=1
while [ $i -le $h ]
do
j=1
while [ $j -le $i ]
do
echo -n " "
let j++
done
k=0
a=$(( 2*($h-$i) - 1 ))
while [ $k -lt $a ]
do
echo -n "*"
let k++
done
echo
let i++
done
ダイヤモンド
#!/bin/bash
# by stanZ
read -p "请输入菱形半径:" h
i=1
while [ $i -le $h ]
do
a=$[ $h -$i ]
j=1
while [ $j -le $a ]
do
echo -n " "
let j++
done
b=$((2*$i - 1))
k=1
while [ $k -le $b ]
do
echo -n "*"
let k++
done
echo
let i++
done
u=1
while [ $u -lt $h ]
do
for((n=1;n<=$u;n++))
do
echo -n " "
done
l=$(( 2*($h-$u)-1 ))
for((m=1;m<=$l;m++))
do
echo -n "*"
done
echo
let u++
done
ユーザーをまとめて作成する
作成する必要のあるユーザー名とパスワードをファイルに書き込み、トラバーサル中に使用して作成します
假设文件是ip.txt
maomao 123
zhuzhu 456
niuniu 789
#!/bin/bash
#while create user
#v1.0 by stanZ 2020-12-17
if [ $# -eq 0 ];then
echo "usage:`basename $0` file"
exit 10
fi
if [ ! -f $1 ];then
echo "error file"
exit 5
fi
while read line
do
user=`echo $line |awk '{print $1}'`
pass=`echo $line |awk '{print $2}'`
id $user &>/dev/null
if [ $? -eq 0 ];then
echo "$user already exists"
else
useradd $user
echo "$pass" |passwd --stdin $user &>/dev/null
if [ $? -eq 0 ];then
echo "$user is created."
fi
fi
done < $1
ネットワークセグメントの存続ホストをテストします
pingが3回失敗した場合、ホストは生きていないと判断されます
#!/bin/bash
while read ip
do
fail_count=0
#for i in `seq 3`
for i in {
1..3}
do
ping -c1 -W1 $ip &>/dev/null
if [ $? -eq 0 ];then
echo "$ip ping is ok."
break
else
echo "$ip ping is failure:$i"
let fail_count++
fi
done
if [ $fail_count -eq 3 ];then
echo "$ip ping is failure!!!"
fi
done <ip.txt