第25課LinuxShellプログラミング3のより多くの構造化コマンド
9017 ワード
説明:この文書の一部は書籍「Linuxコマンドラインとshellスクリプトプログラミング大全」から抜粋され、著作権は原作者の所有となっている.***
第十三章:より多くの構造化コマンド
本章の内容
13.1 forコマンド
コマンドフォーマット
コマンドの説明:変数varはlistの反復値であり、do文とdone文の間に入力されるコマンドは1つ以上の標準bash shellコマンドであってもよい.
13.1.1リストの値を読み取る
forコマンドの最も基本的な使い方は、forコマンド自体が定義した一連の値を巡回することです.
test 1を記述する.shスクリプト
test 1 bを作成する.shスクリプト
13.1.2リストの複雑な値を読み取る
test 2を記述する.shスクリプト
test 3を作成する.shスクリプト
13.1.3変数からリストを読み込む
test 4を記述する.shスクリプト
13.1.4コマンドから値を読み取る
numberテキストの作成
test 5を記述する.shスクリプト
13.1.5フィールド区切りの変更
bash shellでは、スペース/タブ/改行をフィールド分割子として使用します.
test 5 bを記述する.shスクリプト
13.1.6ワイルドカードでディレクトリを読み込む
forコマンドを使用してディレクトリ内のファイルを自動的に巡回できます
test 6を記述する.shスクリプト
test 7を記述する.shスクリプト
13.2 C言語スタイルのforコマンド
13.2.1 C言語のforコマンド
C言語for形式
bashにおけるC言語スタイルのforループフォーマット
test 8を記述する.shスクリプト
13.2.2複数の変数の使用
test 9を記述する.shスクリプト
13.3 whileコマンド
13.3.1 whileの基本フォーマット
コマンドフォーマット
コマンドの説明
test 10を記述する.shスクリプト
13.3.2複数のテストコマンドを使用する
test 11を記述する.shスクリプト
13.4 untilコマンド
コマンドフォーマット
コマンドの説明
test 12を記述する.shスクリプト
test 13を記述する.shスクリプト
13.5ネストループ
ループ文は、他のループコマンドを含む任意のタイプのコマンドをループ内で使用できます.
test 14を記述する.shスクリプト
test 15を記述する.shスクリプト
test 16を記述する.shスクリプト
13.6ファイルデータの循環処理
通常、ファイルに格納されているデータを巡回する必要があります.これは、次の技術と組み合わせて実現する必要があります.
13.7制御サイクル
13.7.1 breakコマンド
breakコマンドを使用して、whileおよびuntilループを含む任意のタイプのループを終了します.
1.単一ループからのジャンプ
作成test 17.shスクリプト
test 18を記述する.shスクリプト
2.内部ループから飛び出す
test 19を記述する.shスクリプト
3.外部ループから飛び出す
test 20を作成する.shスクリプト
13.7.2 continueコマンド
作成test 21.shスクリプト
test 22を記述する.shスクリプト
13.8処理サイクルの出力
doneコマンドの後に処理コマンドを追加することで、ループの出力をパイプまたはリダイレクトすることができます.
作成test 23.shスクリプト
test 24を作成する.shスクリプト
13.9例
13.9.1実行可能ファイルの検索
作成test 25.shスクリプト
13.9.2複数のユーザーアカウントの作成
test 26を作成する.shスクリプト
作成するcsvファイル
13.10まとめ
bash shellは、スクリプトで使用できる3つのループコマンドを提供します.
第十三章:より多くの構造化コマンド
本章の内容
for
until while
13.1 forコマンド
コマンドフォーマット
for var in list
do
commands
done
コマンドの説明:変数varはlistの反復値であり、do文とdone文の間に入力されるコマンドは1つ以上の標準bash shellコマンドであってもよい.
13.1.1リストの値を読み取る
forコマンドの最も基本的な使い方は、forコマンド自体が定義した一連の値を巡回することです.
test 1を記述する.shスクリプト
#!/bin/bash
for test in One The Three Four Five Six
do
echo "The next number is $test"
done
test 1 bを作成する.shスクリプト
#!/bin/bash
for test in One The Three Four Five Six
do
echo "The next number is $test"
done
echo "The last number is $test"
test=Seven
echo "Now, Test number is $test"
13.1.2リストの複雑な値を読み取る
for
,
( )
,
test 2を記述する.shスクリプト
#!/bin/bash
for test in I don\'t know "this'll" work
do
echo "word:$test"
done
test 3を作成する.shスクリプト
#!/bin/bash
for test in Nevada "New Hampshire" "New Mexico" "New York"
do
echo "Now going to $test"
done
13.1.3変数からリストを読み込む
test 4を記述する.shスクリプト
#!/bin/bash
list="One Two Three"
list=$list" Four"
for number in $list
do
echo "The number is $number"
done
13.1.4コマンドから値を読み取る
for
numberテキストの作成
One
Two
Three
test 5を記述する.shスクリプト
#!/bin/bash
file="number"
for number in $(cat $file)
do
echo "The number is $number"
done
13.1.5フィールド区切りの変更
bash shellでは、スペース/タブ/改行をフィールド分割子として使用します.
IFS=$'
'
bash shell
test 5 bを記述する.shスクリプト
#!/bin/bash
file="number"
IFS=$'
'
for number in $(cat $file)
do
echo "The number is $number"
done
13.1.6ワイルドカードでディレクトリを読み込む
forコマンドを使用してディレクトリ内のファイルを自動的に巡回できます
test 6を記述する.shスクリプト
#!/bin/bash
for file in /home/zc/test/unit13/*
do
if [ -d "$file" ]
then
echo "$file is a directory"
elif [ -f "$file" ]
then
echo "$file is a file"
fi
done
test 7を記述する.shスクリプト
#!/bin/bash
for file in /home/zc/test/unit13/*.sh /home/zc/test/unit12
do
if [ -d "$file" ]
then
echo "$file is a directory"
elif [ -f "$file" ]
then
echo "$file is a file"
fi
done
13.2 C言語スタイルのforコマンド
13.2.1 C言語のforコマンド
C言語for形式
for (i=0;i<10;i++)
{
printlf("The next number is $d
",i);
}
bashにおけるC言語スタイルのforループフォーマット
for (( variable assignment ; condition ; iteration process ))
expr
test 8を記述する.shスクリプト
#!/bin/bash
for (( i=1; i<=10;i++ ))
do
echo "The next number is $i"
done
13.2.2複数の変数の使用
test 9を記述する.shスクリプト
#!/bin/bash
for(( a=1,b=10;a<=10;a++,b-- ))
do
echo "$a - $b"
done
13.3 whileコマンド
13.3.1 whileの基本フォーマット
コマンドフォーマット
while test command
do
other commands
done
コマンドの説明
while test command if-then
while test command
,while
test 10を記述する.shスクリプト
#!/bin/bash
var1=10
while [ $var1 -gt 0 ]
do
echo $var1
var1=$[ $var1 - 1 ]
done
13.3.2複数のテストコマンドを使用する
while while
,
test 11を記述する.shスクリプト
#!/bin/bash
var1=10
while echo $var1
[ $var1 -ge 0 ]
do
echo "The is inside the loop"
var1=$[ $var1 - 1 ]
done
13.4 untilコマンド
コマンドフォーマット
until test commands
do
other commands
done
コマンドの説明
until while
untile
0,bash shell
0,
test 12を記述する.shスクリプト
#!/bin/bash
var1=100
until [ $var1 -eq 0 ]
do
echo $var1
var1=$[ $var1-25 ]
done
test 13を記述する.shスクリプト
#!/bin/bash
var1=100
until echo $var1
[ $var1 -eq 0 ]
do
echo Inside the loop: $var1
var1=$[ $var1-25 ]
done
13.5ネストループ
ループ文は、他のループコマンドを含む任意のタイプのコマンドをループ内で使用できます.
test 14を記述する.shスクリプト
#!/bin/bash
for (( a=1;a<=3;a++))
do
echo "Starting loop $a:"
for (( b=1;b<=3;b++))
do
echo " Inside loop:$b"
done
done
test 15を記述する.shスクリプト
#!/bin/bash
var1=5
while [ $var1 -ge 0 ]
do
echo "Outer loog:$var1"
for (( var2=1;$var2<3;var2++ ))
do
var3=$[ $var1 * $var2 ]
echo " Inner loop:$var1*$var2=$var3"
done
var1=$[ $var1 - 1 ]
done
test 16を記述する.shスクリプト
#!/bin/bash
var1=3
until [ $var1 -eq 0 ]
do
echo "Outer loop:$var1"
var2=1
while [ $var2 -lt 5 ]
do
var3=$(echo "scale=4;$var1 / $var2" | bc)
echo " Inner loop:$var1 / $var2 = $var3"
var2=$[ $var2+1 ]
done
var1=$[ $var1 - 1 ]
done
13.6ファイルデータの循環処理
通常、ファイルに格納されているデータを巡回する必要があります.これは、次の技術と組み合わせて実現する必要があります.
:
IFS : for
13.7制御サイクル
13.7.1 breakコマンド
breakコマンドを使用して、whileおよびuntilループを含む任意のタイプのループを終了します.
1.単一ループからのジャンプ
作成test 17.shスクリプト
#!/bin/bash
for var1 in 1 2 3 4 5 6 7 8 9 10
do
if [ $var1 -eq 5 ]
then
break
fi
echo "Iteration number:$var1"
done
echo "The for loop is completed"
test 18を記述する.shスクリプト
#!/bin/bash
var1=1
while [ $var1 -lt 10 ]
do
if [ $var1 -eq 5 ]
then
break
fi
echo "Iteration:$var1"
var1=$[ $var1+1 ]
done
echo "The while loop is completed"
2.内部ループから飛び出す
test 19を記述する.shスクリプト
#!/bin/bash
for (( a=1;a<4;a++ ))
do
echo "Outer loop:$a"
for (( b=1;b<100;b++ ))
do
if [ $b -eq 5 ]
then
break
fi
echo " Inner loop:$b"
done
done
3.外部ループから飛び出す
test 20を作成する.shスクリプト
#!/bin/bash
for (( a=1;a<4;a++ ))
do
echo "Outer loop:$a"
for(( b=1;b<100;b++ ))
do
if [ $b -gt 4 ]
then
break 2
fi
echo " Inner loop:$b"
done
done
13.7.2 continueコマンド
作成test 21.shスクリプト
#!/bin/bash
for (( var1=1;var1<15;var1++ ))
do
if [ $var1 -gt 5 ] && [ $var1 -lt 10 ]
then
continue
fi
echo "Iteration number:$var1"
done
test 22を記述する.shスクリプト
#!/bin/bash
for (( a=1;a<=5;a++ ))
do
echo "Iteration $a:"
for (( b=1;b<3;b++ ))
do
if [ $a -gt 2 ] && [ $a -lt 4 ]
then
continue 2
fi
var3=$[ $a * $b ]
echo " The result of $a * $b = $var3"
done
done
13.8処理サイクルの出力
doneコマンドの後に処理コマンドを追加することで、ループの出力をパイプまたはリダイレクトすることができます.
作成test 23.shスクリプト
#!/bin/bash
for (( a=1;a<10;a++ ))
do
echo "The number is $a"
done > test23.txt
echo "The command is finished"
test 24を作成する.shスクリプト
#!/bin/bash
for state in "North Dakota" Connecticut Illinois Alabama Tennessee
do
echo "$state is the next plae to go"
done | sort
echo "This completes our travels"
13.9例
13.9.1実行可能ファイルの検索
作成test 25.shスクリプト
#!/bin/bash
IFS=:
for folder in $PATH
do
echo "$folder:"
for file in $folder/*
do
if [ -x $file ]
then
echo " $file"
fi
done
done
13.9.2複数のユーザーアカウントの作成
test 26を作成する.shスクリプト
#!/bin/bash
input="users.csv"
while IFS=',' read -r userid name
do
echo "adding $userid"
useradd -c "$name" -m $userid
done < "$input"
作成するcsvファイル
rich,Richard Blum
tim,Timothy Bresnahan
13.10まとめ
bash shellは、スクリプトで使用できる3つのループコマンドを提供します.
for
while
until