フロー制御文 while、case
while 条件ループ文
while 条件付きループ ステートメントは、スクリプトが特定の条件に従ってコマンドを繰り返し実行できるようにするステートメントです。そのループ構造は、多くの場合、実行前に最終的な実行回数を決定しません。これは、for ループの目的と範囲を限定した使用とはまったく異なります。ステートメント、シーン。whileループ文は、条件判定の真偽を判定してコマンドの実行を継続するかどうかを決定し、条件が真の場合は実行を継続し、偽の場合はループを終了します。while ステートメントの構文形式を図に示します。
vim Guess.sh
#!/bin/bash
PRICE=$(expr $RANDOM %1000)re
TIME=0
echo "商品实际价格为0-999之间, 猜猜看是多少?"
while true
do
read -p "请输入你猜测的价格数目:" INT
let TIMESS++
if [ $INT -eq $PRICE ] ; then
echo "恭喜你答对了,实际价格是 $PRICE"
echo "您总共猜测了 $TIMES次"
exit
elif [ $INT -gt $PRICE ] ; then
echo "太高了"
else
echo "太低了"
fi
done
exit を使用して while ループを終了します。
ケース条件テストステートメント
case ステートメントは、複数の範囲のデータを照合します。照合が成功すると、関連するコマンドが実行され、条件付きテスト全体が終了します。データがリストされた範囲にない場合は、アスタリスク (*) で定義されたデフォルトのコマンドが使用されます。 )が実行されます。
次に、文字を入力して変数 KEY に割り当てるようにユーザーに要求するスクリプト Checkkeys.sh を作成し、変数 KEY の値に応じて値が文字、数字、またはその他の文字であることをユーザーに示します。
vim Checkkeys.sh
#!/bin/bash
read -p "请输入一个字符,并按enter键确认:" KEY
case "$KEY" in
[a-z] | [A-Z])
echo "您输入的是 字母"
;;
[0-9])
echo "您输入的是 数字"
;;
*)
echo "您输入的是 空格、功能键或其他控制字符。"
esac
# bash Checkkeys.sh
スケジュールされたタスクサービスプログラム
サーバーのスケジュールされたタスク サービスを設定し、定期的および定期的な作業をシステムに引き渡して自動的に完了する方法。
計画タスクは、1 回限りの計画タスクと長期計画タスクに分けられます。
➢ 1 回限りの計画タスク: 今夜 23:30 に Web サイトのサービスを再起動します。
➢ 長期計画タスク: 毎週月曜日の午前 3 時 25 分に、/home/wwwroot ディレクトリを Backup.tar.gz としてパッケージ化してバックアップします。
1 回限りのスケジュールされたタスクは 1 回だけ実行され、通常は一時的な作業ニーズに使用されます。この機能を実現するには at コマンドを使用できます。「at time」の形式で記述するだけです。設定済みでまだ実行されていないワンタイムスケジュールタスクを表示したい場合は at -l コマンドを使用でき、削除したい場合は「atrm タスク番号」を使用できます。at コマンドのパラメータとその機能を表に示します。
at コマンドを使用して 1 回限りのスケジュールされたタスクを設定する場合、デフォルトは対話型メソッドです。たとえば、次のコマンドを使用して、今夜 23:30 に Web サイト サービスを自動的に再起動するようにシステムを設定します。
at 23:30
systemctl restart httpd
at -l
以前に学習したパイプ文字 (任意のゲート) を 2 つのコマンドの間に挿入し、at コマンドに前の echo コマンドの出力情報を受信させることで、一度限りのタスクを作成して計画するという目的を達成できます。 -インタラクティブな方法。
echo "systemctl restart httpd" | at 23:30
at -l
上記では同じスケジュールされたタスクが 2 つ設定されており、そのうちの 1 つは atrm コマンドを使用して簡単に削除できます。
atrm 2
at -l
ここには特別なシナリオもあります。スケジュールされたタスクをシェル スクリプトに書き込み、上記のような固定時刻 (「23:30 に」コマンド) ではなく、ユーザーがスクリプトをアクティブ化したときにカウントダウンの実行を開始します。私たちは何をすべきか?
一般的には、「at now +2 MINUTE」という方法を使用します。これは、タスクが 2 分後に実行されることを意味します (MINUTE)。または、時間 (HOUR)、日 (DAY) などの単語に置き換えることもできます。月 (MONTH) :
at now + 2 MINUTE
systemctl restart httpd
Linux システムが特定のタスクを定期的かつ定期的に実行できることが望まれます。その場合、Linux システムでデフォルトで有効になっている crond サービスがまさに完璧です。スケジュールされたタスクを作成および編集するコマンドは crontab -e、現在のスケジュールされたタスクを表示するコマンドは crontab -l、スケジュールされたタスクを削除するコマンドは crontab -r です。さらに、管理者としてシステムにログインしている場合は、crontab コマンドに -u パラメータを追加して、他の人のスケジュールされたタスクを編集できます。crontab コマンドのパラメータとその機能は次のとおりです。
計画されたタスクを正式に展開する前に、Liu Tun 教師と一緒に「分、時間、日、月、週の順序」という公式を読んでください。これは、crond サービスを使用してタスクを設定するためのパラメーターの形式です (形式については、表 4-8 を参照してください)。なお、一部のフィールドが設定されていない場合は、アスタリスク(*)を使用してフィールドを配置する必要があります。図に示すように、毎週月曜日、水曜日、金曜日の午前 3 時 25 分に
、 tar コマンドを使用して、特定の Web サイトのデータを配置する必要があります。ディレクトリはバックアップ ファイルとしてパッケージ化されています。自分用にスケジュールされたタスクを作成するときに、-u パラメーターを使用せずに、crontab -e コマンドを使用してスケジュールされたタスクを作成できます。crontab -e コマンドの具体的な実装効果と crontab -l コマンドの結果は次のとおりです。
crontab -e
crontab -l
複数の期間を表すにはカンマ (,) を使用することに加えて、たとえば、「8,9,12」は 8 月、9 月、12 月を表すことに注意してください。マイナス記号 (-) を使用して、連続した期間を示すこともできます (たとえば、フィールド「day」の値が「12-15」の場合、各月の 12 日から 15 日を意味します)。除算記号 (/) を使用してタスクの実行間隔を示すこともできます (たとえば、「*/2」はタスクを 2 分ごとに実行することを意味します)。
crond サービスにスケジュールされたタスクの複数のコマンド ステートメントを同時に含める必要がある場合は、各行にコマンド ステートメントを 1 つだけ記述する必要があります。たとえば、別のスケジュールされたタスクを追加してみましょう。その機能は、毎週月曜から金曜の午前 1 時に /tmp ディレクトリ内のすべてのファイルを自動的にクリアすることです。特に、crond サービスのスケジュールされたタスクのパラメーターでは、すべてのコマンドを絶対パスの形式で記述する必要があることに注意してください。絶対パスがわからない場合は、whereis コマンドを使用して問い合わせてください。rm コマンドへのパスは、以下の出力では太字で示されています。
whereis rm
crontab -e
crontab -l
計画サービスを使用する場合の考慮事項をまとめます。
➢ crond サービスの設定パラメータでは、シェルスクリプトのように # 記号の先頭にコメント情報が記述されるのが一般的です。これにより、将来このコマンドコードを検討するときに、その機能、要件などの重要な情報をすぐに理解できます。 、そして作家。
➢ スケジュールされたタスクの「分」フィールドには値が必要です。空または * であってはなりません。「日」フィールドと「週」フィールドは同時に使用できません。そうしないと競合が発生します。
cront スケジュール済みタスクの削除は非常に簡単です。crontab -e コマンドを使用して編集インターフェイスに入り、内部のテキスト情報を削除するだけです。crontab -r コマンドを使用して直接削除することもできます。
crontab -r
crontab -l