forとifを利用してあなたの最初のスクリプトを書きます


スクリプトの内容:
ping-c#IP:ターゲットIPに#個のパケットを送信し、到達可能かどうかをテストします.
コマンドステータスの結果:
成功:0失敗:1-255
説明:コマンドを完了するときにecho$を使用しますか?コマンドが実行されるかどうかをテストし、0を返すとコマンドが成功したことを示し、1-255の値を返すとコマンドの実行に失敗したことを示します.
[root@smokeping etc]# ls -d /etc
/etc
[root@smokeping etc]# echo $?
0
[root@smokeping etc]# llllllls
-bash: llllllls: command not found
[root@smokeping etc]# echo $?
127

bashのテストタイプ:
数値テスト:
-gt:より大きいかどうか;
-ge:等しいかどうか;
-eq:等しいかどうか;
-ne:等しくないかどうか;
-lt:小さいかどうか;
-le:等しいかどうか;
ここでは-eqを使ってecho$をテストする必要がありますか?の値が0に等しいかどうかは、コマンドが完了したかどうかを確認します.
出力リダイレクト:COMMAND>NEW_POS, COMMAND >> NEW_POS
>:リダイレクトを上書きすると、ターゲットファイルの既存のコンテンツが消去されます.
>>リダイレクトを追加すると、新しい内容がターゲットファイルの末尾に追加されます.
説明:スクリプトでは、存在するIPを1つのテキストに出力し、存在しないIPを別のテキストに出力する必要があります.
スクリプトテスト:
[root@smokeping tmp]# bash -x ping.sh

説明:スクリプト実行をテストし、スクリプトエラーがどのステップで誰が知っているかを詳細に表示します.
以上の内容はifとforを結合すればよい.
さあ、シナリオを書きます.
#!/bin/bash
for i in 172.20.16.{1..255}
    do
    {
    ping -c2 $i &> /dev/null
    if [ $? -eq 0 ];then
                echo $i>>huo.txt
    else
                echo $i>>si.txt
    fi
    }
    done

デバッグスクリプトの過程でifの後ろのスペースや条件テストの[$?-eq 0]のスペースなど、いくつかの問題に遭遇しました.