シェルスクリプトのクイックスタート - 条件文とループ
皆さんはすでにシェルスクリプトについて少し知っていて、シェルスクリプトの条件文に期待しているのではないでしょうか。今回のブログでは、シェルの条件文とループについて説明しましょう。
1. 条件付き判定
1.1 基本的な構文
条件
注意事項
- 条件の前後には空白を入れる必要があります
- 条件が空でない場合、[atguigu]はtrueを返し、[]はfalseを返します。
1.2. よく使われる判定条件
(1) 2つの整数を比較する=文字列比較
- -lt less than (以下) -le less than equal (以下等)
- -eq よりも等しい -gt よりも大きい
- -ge 等しいより大きい -ne 等しくない
(2) ファイルパーミッションによる判定
- 読み取り権限を持つ -r (読み取り)
- -w は書き込み可能(write)です。
- -x 実行権限を持つ (実行)
(3) ファイルタイプによる判定
- -f ファイルが存在し、かつ通常のファイル(file)である。
- -e ファイルが存在する(existence)
- -d ファイルが存在し、ディレクトリである
1.3. 事例紹介
23 は 22 より大きいか、または 22 と等しいか $?を使って結果が真かどうかを確認する 0 を返す
[root@node01 shell]# [ 23 -ge 22 ]
[root@node01 shell]# echo $?
0
ファイル固有のパーミッションを表示する $? trueの場合は0を返します。
[root@node01 shell]# [ -w helloword.sh ]
[root@node01 shell]# echo $?
0
ディレクトリにファイルが存在するかどうかを $? 真の場合は0を返します
[root@node01 shell]# [ -e /opt/shell/aa.txt ] -- does not exist
[root@node01 shell]# echo $?
1
[root@node01 shell]# [ -e /opt/shell/helloword.sh ]
[root@node01 shell]# echo $?
0
多条件判定(&&は前のコマンドが成功してから次のコマンドが実行されること、||は前のコマンドが失敗してから次のコマンドが実行されることを意味します。)
[root@node01 shell]# [ condition ] && echo ok || echo notOK
ok
[root@node01 shell]# [ condition ] && [ ] ||echo notOk
notOk
1.4. 判断の場合
1.4.1 基本的な構文
if [conditional];then
program
fi
or
if [ conditionals ]
then
program
fi # end character
注意事項
- [条件付き]の場合は、括弧と条件の間にスペースが必要です。
- スペースが続く場合
1.4.2 ハンズオンケース
数字を入力し、それが1であれば私は張三、2であれば私は李斯、それ以外であれば出力される。
[root@node01 shell]# vim if.sh
if [ $1 -eq '1' ]
then
echo 'I am Zhang San'
elif [ $1 -eq '2' ]
then
echo 'I am Li Si'
fi
[root@node01 shell]# sh if.sh 2
I am Li Si
[root@node01 shell]# sh if.sh 1
I am Zhang San
[root@node01 shell]# sh if.sh 3
[root@node01 shell]#
1.5 caseステートメント
1.5.1 基本的な構文
case $variable name in
"value1")
Program 1 ;;
"value2")
Program 2 ;;
"value n")
Program n ;;
esac
注意
- ケースは "in"で終わり、各マッチは右括弧 ")" で終わらなければなりません。
- 二重分割の ";;" はコマンドシーケンスの終了を示し、java の break に相当します。
- 最後の "*)" は、java の default とは異なり、default モードを表します。
1.5.2 ハンズオンケース
数字を入力し、1ならクラスリーダー、2なら副リーダー、それ以外ならサイレンを出力します。
[root@node01 shell]# vim case.sh
#! /bin/bash
case $1 in
'1')
echo 'class leader' ;;
'2')
echo 'Vice squad leader' ;;
'*')
echo 'siren' ;;
esac
[root@node01 shell]# sh case.sh 1
squad leader
[root@node01 shell]# sh case.sh 2
Assistant shift manager
[root@node01 shell]# sh case.sh 3
Siren
2. ループ
2.1 Forループ
2.1.1 基本構文1
for ((initial value; loop control condition; variable change))
do
Program
done
2.1.2 ハンズオンケース
1から100までの足し算
**[root@node01 shell]# vim for1.sh
#! /bin/bash
num=0
for((i=0;i<=100;i++))
do
num=$[$num+$i]
done
echo $num
[root@node01 shell]# sh for1.sh
5050
2.1.3 基本構文2
for variables in value1 value2 value3 ...
do
program
done
2.1.4 ハンズオンの例
すべての入力パラメータを表示する
hie[root@node01 shell]# vim for2.sh
#! /bin/bash
for i in $*
do
echo " I love $i "
done
[root@node01 shell]# sh for2.sh 张三 李四
I love 张三
I love 李四
と$@の違いを比較する
関数やスクリプトに渡される引数のうち、二重引用符で囲むことができないものは、$ *と$ @の両方で示します。
[root@node01 shell]# vim for3.sh
#! /bin/basn
for i in $*
do
echo " I love $i"
done
for j in $@
do
echo " I love $j"
done
[root@node01 shell]# sh for3.sh 张三 李四 王五
I love 张三
I love 李四
I love 王五
I love 张三
I love 李四
I love 王五
二重引用符で囲むと "", "$*" は、すべてのパラメータを一括して $1,$2,3... の形で受け取ります。3... .3... .n; "$@ は個々の引数を "$1", "$2", "3 " ... ... "3" ... "3" ...で区切って表示することができます。すべてのパラメータを "n" の形式で出力します。
[root@node01 shell]# vim for4.sh
#! /bin/bash
for i in "$*"
do
echo " I love $i "
done
for j in "$@"
do
echo " I love $j "
done
[root@node01 shell]# sh for4.sh 张三 李四 王五
I love 张三 李四 王五
I love 张三
I love 李四
I love 王五
3.2 whlie ループ
3.2.1 基本的な構文
while [submit judgmental]
do
program
done
3.2.2 ハンズオンケース
1から100までの足し算
[root@node01 shell]# vim while.sh
#! /bin/bash
num=0
i=1
while [ $i -le 100 ]
do
num=$[$num+$i]
i=$[$i+1]
done
echo $num
[root@node01 shell]# sh while.sh
5050
以上、「条件付き判定文とループを使ったシェルスクリプトのクイックスタート」をお届けしました。シェルの条件判断文とループの詳細については、スクリプトハウスの過去の記事を検索するか、以下の関連記事を引き続き参照してください。
関連
-
シェルスクリプトによる複数インスタンスでのnginxのデプロイメントの詳細チュートリアル
-
bashスクリプトがカップ/メモリ/ディスクの使用量を監視する方法
-
シェルでCPUを占有するスクリプトをlinuxで書く方法
-
シェルは現在実行中のスクリプトの絶対パスを取得する
-
Linuxシェルセレクトメニュー選択実装コード
-
シェルスクリプト暗号化ツールshcの詳細説明
-
コマンドライン引数を読み込むシェルスクリプトの実装
-
Linux で jar パッケージを起動するためのカスタムシェルスクリプト
-
Linuxでシェルスクリプトの先頭に固定書式を設定する方法
-
Bashのトリック:変数を改行に割り当てる(ファイルが改行で終わっているかどうかを判断するため)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン