シェル実行フロー制御(for、while、until、if、case、expect、controller)

1.スクリプトを記述します。要件は次のとおりです。
ここに写真の説明を挿入

スクリプトを作成するときは、スクリプトの最初に関数定義を配置してみてください。スクリプトの最後に関数定義を配置することはできません。そうしないと、関数が読み取られません。
ここに写真の説明を挿入

2.ステートメントの場合:

结构:
for	定义变量
do	使用变量,执行动作
done	结束标志

格式1:
#!/bin/bash
for WESTOS in `seq 2 2 10`   #开始为2,结束为10(包含10),部长是2;即10以内的偶数
do
        echo $WESTOS
done

格式2:
for WESTOS in 1 2 3(westos linux lin)
do
        echo $WESTOS
done

格式3:
for WESTOS in {
    
    10..1} (从10到1)
do
        echo $WESTOS
done

格式4:
for ((WESTOS=0;WESTOS<10;WESTOS++))
do
        echo $WESTOS
done

補足:seqコマンド:特定の数値から別の数値へのすべての整数を生成するために使用されます

構文:
seq [options] ... mantissa
seq [options] ...最初の番号とmantissaseq
[options] ...最初の番号の増分mantissa

パラメータ:
-f、-format = formatはprintfスタイルの浮動小数点形式を使用します
-s、-separator = stringは指定された文字列を使用して数値を区切ります(デフォルトの使用:\ n)
-w、-equal-width列の前幅を同じにするには0を追加します

スクリプトの記述:
check_host.sh
このスクリプトを使用して、現在のホストに直接接続されている10個のホストに正常なネットワークがあるかどうかを検出します。
ネットワークが正常な場合は、ホストのIPリストを表示してください

ここに写真の説明を挿入

スクリプトの記述:
create_user_file.shファイルusernamefileを追加ファイルuserpasswd
追加し、ユーザーが存在する場合はプロンプトを表示し、存在しない場合は作成します。

ここに写真の説明を挿入

3.whileステートメントとuntilステートメント:

whilewhile ture	#条件为真
do		#条件成立所作循环动作

done

untiluntil false	##条件为假
do
		#条件不成立所作循环动作

done

whileステートメントとuntilステートメントの実行ブロック(do)には、変数を制御するための条件が必要です。そうでない場合、無限にループします。while
ステートメントは99の乗算テーブルを出力します。
ここに写真の説明を挿入

untilステートメントは99乗算テーブルを出力します。
ここに写真の説明を挿入

4. Ifステートメント:

if
then
elif
then
...
else
fi

スクリプトの演習:
check_file.sh
ファイルを入力してください:ファイル
ファイルは存在しません
ファイルは
ディレクトリです
このスクリプトは、ユーザーが終了に入るまで質問を続けます
ここに写真の説明を挿入

ifステートメントは、条件を満たすステートメントが判断されるまで(判断メカニズム、yesおよびno)、上から下に複数回判断を実行します。case
ステートメントは1回だけ判断されます(呼び出しメカニズム)。

5.caseステートメント:

case $1 in
	word1|WORD1)
	action1
	;;
	word2|WORD2)
	action2
	;;
	*)
	action3
esac

スクリプトの演習:
system_watch.shディスクメモリのアップロード(毎秒表示)
ディスクモニターディスク使用量
メモリモニターメモリ使用量
アップロードモニター起動負荷
ここに写真の説明を挿入

6.expectステートメント:


问题脚本
#!/bin/bash
read -p "what's your name:" NAME
read -p "How old are you: " AGE 
read -p "Which objective: " OBJ
read -p "Are you ok? " OK

echo $NAME is $AGE\'s old study $OBJ feel $OK

应答脚本
#!/usr/bin/expect
set timeout 1                 ##脚本问答等待时间
set NAME [ lindex $argv 0 ]   ##第一个字符
set AGE  [ lindex $argv 1 ]
set OBJ  [ lindex $argv 2 ]
set FEEL [ lindex $argv 3 ]
spawn /mnt/ask.sh
expect {
    
    
	"name"	{
    
     send "$NAME\r";exp_continue }
	"old"		{
    
     send "$AGE\r";exp_continue }
	"objective"	{
    
     send "$OBJ\r";exp_continue }
	"ok"		{
    
     send "$FEEL\r" }
}
expect eof

将应答脚本写入shell:
#!/bin/bash
echo hello westos
/usr/bin/expect <<EOF
spawn /mnt/ask.sh
expect {
    
    
"name"	{
    
     send "$1\r";exp_continue }
"old"		{
    
     send "$2\r";exp_continue }
"objective"	{
    
     send "$3\r";exp_continue }
"ok"		{
    
     send "$4\r" }
}
expext eof

スクリプト演習:
host_list.shの
。172.25.254.1-172.25.254.10ネットワークが開いているかどうかを検出
:それが開いている場合は、生成された解像度のリストは以下のようにされた
IPホスト名
など:172.25.254.1 westos_Student1.westos.org 7.break
ここに写真の説明を挿入
、継続、終了コントローラ:
「$を? "終了値、正しい結果出力、または終了後の終了値が0であることを示します。

continue	##终止当此次前循环提前进入下个循环
break		##终止当前所在语句所有动作进行语句外的其他动作
exit		##脚本退出

おすすめ

転載: blog.csdn.net/lb1331/article/details/111636747