if for while util case selectパラメータ
8798 ワード
if
if文構造[if/then/elif/else/fi]
if条件テスト文;then action; [elif条件action;else action]fi;
shellコマンドは、セミコロンで分割してもよいし、改行で分割してもよい.1行に複数のコマンドを書き込む場合は、';"分割.
$> a=5;if [[ a -gt 4 ]] ;then echo ‘ok’;fi; ok
例:(test.sh)
#!/bin/sh
scores=40;
if [[ $scores -gt 90 ]]; then
echo "very good!";
elif [[ $scores -gt 80 ]]; then
echo "good!";
elif [[ $scores -gt 60 ]]; then
echo "pass!";
else
echo "no pass!";
fi;
条件テストには、[[]],[],testのいくつかがあります.注意:[[]]と変数の間にスペースで区切られています.
for
for...in文
for変数in seq文字列;
do
action
done;
インスタンス(testfor.sh):
#!/bin/sh
for i in $(seq 10); do
echo $i;
done;
for((代入;条件;演算文))
for((付与;条件;演算文);
do
action;
done;
インスタンス(testfor 2.sh)
#!/bin/sh
for((i=1;i<=10;i++));do
echo $i;
done;
while
while文構造
while条件文;
do
action;
done;
例1:
#!/bin/sh
i=10;
while [[ $i -gt 5 ]];do
echo $i;
((i--));
done;
例2:(ファイルの内容をループ読み込み:)
#!/bin/sh
while read line;do
echo $line;
done < /etc/hosts;
until
構文:
until条件;
do
action;
done;
条件が満たされるまで、脱退する.そうでなければactionを実行します.
インスタンス(testuntil.sh):
#!/bin/sh
a=10;
until [[ $a -lt 0 ]];do
echo $a;
((a—));
done;
case
構文構造
case $arg in pattern | sample) # arg in pattern or sample ;; pattern1) # arg in pattern1 ;; *) #default ;; esac
説明:pattern 1は正規表現で、次の文字を使用できます.
*
?
[abc] a, b, c
[a-n] a n
|
例:
#!/bin/sh
case $1 in
start | begin)
echo "start something"
;;
stop | end)
echo "stop something"
;;
*)
echo "Ignorant"
;;
esac
select
構文:
select変数name in seq変数
do
action
done
例:
#!/bin/sh
select ch in "begin" "end" "exit"
do
case $ch in
"begin")
echo "start something"
;;
"end")
echo "stop something"
;;
"exit")
echo "exit"
break;
;;
*)
echo "Ignorant"
;;
esac
done;
説明:selectはループ選択であり、case文と一般的に使用されます.
shellプログラミングでif文内判定パラメータを使用
–b file
-c fileが存在し、文字ファイルである場合に真を返す
-d pathnameが存在し、ディレクトリである場合に真を返す
-e pathnameで指定したファイルまたはディレクトリが存在する場合に真を返す
-f fileが存在し、正規ファイルである場合に真を返す
-g pathnameで指定されたファイルまたはディレクトリが存在し、SGIDビットが設定されている場合は真に戻る
-h fileが存在し、シンボルリンクファイルである場合に真を返します.このオプションは古いシステムでは無効です.
-k pathnameで指定されたファイルまたはディレクトリが存在し、「ヒステリシス」ビットが設定されている場合に真を返す
-p fileが存在し、コマンドパイプである場合は真に戻る
-r pathnameで指定されたファイルまたはディレクトリが存在し、読み取り可能である場合に真に戻る
-s fileにファイルサイズが0より大きい場合に真を返す
-u pathnameで指定されたファイルまたはディレクトリが存在し、SUIDビットが設定されている場合に真を返す
-w pathnameで指定されたファイルまたはディレクトリが存在し、実行可能である場合、真を返します.1つのディレクトリがそのコンテンツのためにアクセスされるのは必然的に実行可能である.
-o pathnameによって指定されたファイルまたはディレクトリが存在し、現在のプロセスの有効なユーザIDによって指定されたユーザが所有している場合、真を返す.
UNIX Shellでは、文字の書き方を比較します.
-eqは
-neは等しくない
-gtより大きい
-ltが小さい
-leが等しい以下
-geが等しい以上
-z空欄
=2文字が等しい
!= 2つの文字が等しくない
-n非空欄
より詳細な説明:
ファイル比較演算子
-e filename filenameが存在する場合は真[-e/var/log/syslog]
-d filename filenameがディレクトリの場合は真[-d/tmp/mydir]
-f filename filenameが通常ファイルの場合は真[-f/usr/bin/grep]
-L filename filenameがシンボルリンクの場合は真[-L/usr/bin/grep]
-r filename filename読み取り可能な場合は真[-r/var/log/syslog]
-w filename filenameが書ける場合は真[-w/var/mytmp.txt]
-x filename filename実行可能な場合は真[-L/usr/bin/grep]
filename 1-nt filename 2 filename 1がfilename 2より新しい場合は真[/tmp/install/etc/services-nt/etc/services]
filename 1-ot filename 2 filename 1がfilename 2より古い場合は真[/boot/bzImage-ot arch/i 386/boot/bzImage]
文字列比較演算子(スペースがコードを乱すのを防ぐ良い方法である引用符の使用に注意してください)
-z string string長さがゼロの場合は真[-z$myvar]
-n string string長さがゼロでない場合は真[-n$myvar]
string 1=string 2 string 1がstring 2と同じ場合は真[$myvar=onetwo three]
string1 != string 2 string 1がstring 2と異なる場合は真[$myvar!=onetwo three]
算術比較演算子
num 1-eq num 2は[3-eq$mynum]に等しい
num 1-ne num 2が[3-ne$mynum]に等しくない
num 1-lt num 2が[3-lt$mynum]未満
num 1-le num 2が[3-le$mynum]以下である
num 1-gt num 2が[3-gt$mynum]より大きい
num 1-ge num 2が[3-ge$mynum]以上
スクリプトの例:
#!/bin/bash
# This script prints a message about your weight if you give it your
# weight in kilos and hight in centimeters.
if [ ! $# == 2 ]; then
echo “Usage: $0 weight_in_kilos length_in_centimeters”
exit
fi
weight=”$1”
height=”$2”
idealweight= [ height - 110]
if [ weight−le idealweight ] ; then
echo “You should eat a bit more fat.”
else
echo “You should eat a bit more fruit.”
fi
# weight.sh 70 150
You should eat a bit more fruit.
# weight.sh 70 150 33
Usage: ./weight.sh weight_in_kilos length_in_centimeters
位置パラメータ1,2,...,N,#はコマンドラインのパラメータ数を表し,$0はスクリプトの名前を表し,
1番目のパラメータは1、2番目のパラメータは2を表します.このように、パラメータ数の合計数は$#に存在します.上記の例では、スクリプトを変更する方法を示しています.パラメータが2つ未満または余分な場合、メッセージを印刷します.
を使用して、状況を確認します.
$> bash -x tijian.sh 60 170
+ weight=60
+ height=170
+ idealweight=60
+ ‘[’ 60 -le 60 ‘]’
+ echo ‘You should eat a bit more fat.’
You should eat a bit more fat.
ここで、-xはスクリプトの実行状況をチェックするために使用されます.