シェル ループ文の詳細な説明 -- for ループ


はじめに: シェル プログラミングでは、選択と判断に加えて、ディレクトリ ファイルのトラバース、バッチでのユーザーの追加など、いくつかの特別な場合にループ操作が必要です。すべてループ操作が必要です。

1. for ループの基本形式

文法形式:

for 变量名 in 取值列表
do
  命令
done

ここに画像の説明を挿入
for ループの実行回数は、値リスト内の変数の数に依存します

for i in {
    
    1..5};do echo $i;done
{
    
    1..5}为取值范围1到5
echo $i 输出当前的取值

ここに画像の説明を挿入

for((i=1;i<=5;i++));do echo $i;done
使用(())双括号,可以支持C语言的一些命令
i=1;i<=5;i++ #i初始值为1,如果i小于等于5时执行循环,每次循环后+1

ここに画像の説明を挿入

for i in `seq 5`;do echo $i;done
seq 5{
    
    1..5}效果一样

ここに画像の説明を挿入

for i in `seq 5`;do echo "hello world";done
使用变量i 循环5次
每次执行echo "hello world"命令

ここに画像の説明を挿入
for ループを使用して現在のディレクトリをトラバースする
ここに画像の説明を挿入

2. for ループ スクリプト

for ループを使用して実装された単純なスクリプト

2.1 テストホストのステータス

LAN内のホストの生存状況を検知

#!/bin/bash
for IP in `cat /root/for/ip.txt`    #ip文件为存放ip地址的
do
  ping -c 3 -i 0.2 -w 3 $IP &>/dev/null #-c 3 ping3次主机 -i 0.2ping主机间隔 -w 3ping主机超时间隔
  if [ $? -eq 0 ];then
  echo "host $IP is up"
  else echo "host $IP is down"
  fi
done

ここに画像の説明を挿入

ここに画像の説明を挿入

2.2 ユーザーを追加する

for ループと if 条件ステートメントを使用して、バッチでユーザーを追加します

#!/bin/bash
for user in `cat /root/for/a.txt`    #a.txt为存放用户名单文件
do
  if grep $user /etc/passwd &>/dev/null; then   #检查用户是否存在 
     echo "$user用户已经存在"
  elif [ -d /home/$user ];then          #检查home下是否存在和用户相同的目录 
     echo "$user用户存在宿主目录"    
  else useradd $user                    #添加用户并设置初始密码 
       echo "123456" |passwd --stdin $user &>/dev/null  
       echo "$user用户已经创建,初始密码为:123456"
  fi
done

ここに画像の説明を挿入

ここに画像の説明を挿入
ユーザーステータスが存在または異常です
ここに画像の説明を挿入

2.3 九九

for ループを使用して 99 の掛け算の表を出力します

#!/bin/bash
for ((i=1;i<=9;i++))     #此处也可以写  for i in {1..9}
  do
     for ((j=1;j<=i;j++))  #此处也可写 for j in `seq $i`
       do echo -n -e "$j*$i=$[j*i]\t" #-n不换行输出;-e使用\转义符;\t横向制表;若不用-e,则\t为普通字符
       done
  echo
  done

ここに画像の説明を挿入
ここに画像の説明を挿入

3. まとめ

1. for ループは実際の生成で多く使用され、何かに対する手動の繰り返し操作を回避します
2. for ループのリストは正規表現をサポートします
3. for ループで使用される (()) は、二重括弧内の C 言語をサポートします コマンド
4 . for ループ内の変数は、値リストの値を取得するためにループしているだけなので、値リストのパラメーターの数によってサイクル数が決まります。

おすすめ

転載: blog.csdn.net/weixin_44175418/article/details/124444938