Created
February 12, 2012 12:23
-
-
Save brokendish/1808250 to your computer and use it in GitHub Desktop.
シェルスクリプト(bash,ksh,sh)で共通して使える部分の基本
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
#-------------------------------------------------------------- | |
#テスト用のファイルを作成する | |
#-------------------------------------------------------------- | |
echo '********ヒアドキュメントをリダイレクトしてファイルを作成********' | |
echo 'プロセスID付きのファイルを作成' | |
cat << EOF > test.lst$$ | |
abc 123 | |
def 456 | |
ghi 789 | |
jkl 012 | |
mno 345 | |
pqr 678 | |
stu 901 | |
vwx 234 | |
yzz 567 | |
XXX END | |
EOF | |
#-------------------------------------------------------------- | |
# 環境変数の設定 | |
#-------------------------------------------------------------- | |
export A='A-DaYO!' | |
#-------------------------------------------------------------- | |
# if文 | |
#-------------------------------------------------------------- | |
echo '********** if文 開始**********' | |
if [ "$A" = "A-DaYO!" ]; | |
then | |
echo "$A" | |
else | |
echo "A-Janai!!" | |
fi | |
echo '********** if文 終了**********' | |
#見やすくするため5個改行 | |
for i in {1..5};do echo " ";done | |
#-------------------------------------------------------------- | |
# for文 変数から表示 | |
#-------------------------------------------------------------- | |
echo '********** for文 変数から表示 開始**********' | |
for i in $Lst; | |
do | |
echo $i | |
done | |
echo '********** for文 変数から表示 終了**********' | |
#見やすくするため5個改行 | |
for i in {1..5};do echo " ";done | |
#-------------------------------------------------------------- | |
# for文 ファイルから表示(その1) | |
#-------------------------------------------------------------- | |
echo '********** for文 ファイルから表示(その1) 開始**********' | |
for i in `cat test.lst$$`; | |
do | |
printf "%s\n" $i | |
done | |
echo 'えっ!何これて感じだと思う。通常は「while文」でヤルどうしてもfor使いたいなら「その2」でヤル' | |
echo '********** for文 ファイルから表示(その1) 終了**********' | |
#見やすくするため5個改行 | |
for i in {1..5};do echo " ";done | |
#-------------------------------------------------------------- | |
# for文 ファイルから表示(その2 セパレータを指定) | |
#-------------------------------------------------------------- | |
echo '********** for文 ファイルから表示(その2 セパレータを指定) 開始**********' | |
#ファイルの区切りを改行にする | |
IFS=$'\n' | |
for i in `cat test.lst$$`; | |
do | |
echo $i | |
done | |
echo '********** for文 ファイルから表示(その2 セパレータを指定) 終了**********' | |
#見やすくするため5個改行 | |
for i in {1..5};do echo " ";done | |
#-------------------------------------------------------------- | |
# for文 ファイルから表示(その3 回数指定) | |
#-------------------------------------------------------------- | |
echo '********** for文 ファイルから表示(その3 回数指定) 開始**********' | |
for i in `seq 1 10`; | |
do | |
echo $i | |
done | |
echo '********** for文 ファイルから表示(その3 回数指定) 終了**********' | |
#見やすくするため5個改行 | |
for i in {1..5};do echo " ";done | |
#-------------------------------------------------------------- | |
# for文 ファイルから表示(その4 回数指定) | |
#-------------------------------------------------------------- | |
echo '********** for文 ファイルから表示(その3 回数指定) 開始**********' | |
for i in {1..10}; | |
do | |
echo $i | |
done | |
echo '********** for文 ファイルから表示(その3 回数指定) 終了**********' | |
#見やすくするため5個改行 | |
for i in {1..5};do echo " ";done | |
#-------------------------------------------------------------- | |
# while文 条件が一致する間 | |
#-------------------------------------------------------------- | |
echo '********** while文 条件が一致する間 開始 **********' | |
echo 'aを入力している間、抜け出せないよ!' | |
read imp | |
while [ "$imp" = "a" ]; | |
do | |
echo "ループに入った!抜け出すには「a」以外のキーを入力" | |
read imp | |
done | |
echo '********** while文 条件が一致する間 終了 **********' | |
#見やすくするため5個改行 | |
for i in {1..5};do echo " ";done | |
#-------------------------------------------------------------- | |
# while文 ファイルから表示 | |
#-------------------------------------------------------------- | |
echo '********** while文 ファイルから表示 開始 **********' | |
while read i; | |
do | |
echo $i | |
done<test.lst$$ | |
echo '********** while文 ファイルから表示 終了 **********' | |
#見やすくするため5個改行 | |
for i in {1..5};do echo " ";done | |
#-------------------------------------------------------------- | |
# while文 無限ループ | |
#-------------------------------------------------------------- | |
echo '********** while文 無限ループ 開始 **********' | |
echo 'aを入力しないと、抜け出せないよ!' | |
while : | |
do | |
read imp | |
if [ "$imp" = "a" ]; | |
then | |
echo "脱出!!" | |
break | |
else | |
echo "無理!出たければaを入力して" | |
fi | |
done | |
echo "抜けれたね!" | |
echo '********** while文 無限ループ 終了 **********' | |
#見やすくするため5個改行 | |
for i in {1..5};do echo " ";done | |
#-------------------------------------------------------------- | |
# case文 | |
#-------------------------------------------------------------- | |
echo '********** case文 開始 **********' | |
while : | |
do | |
echo "何かキーを入力「a,b,c,abc,x」だけだよ!終了するにはxを入力" | |
read imp | |
case $imp in | |
"a" ) echo "aだね!";; | |
"b" ) echo "bだね!";; | |
"c" ) echo "cだね!";; | |
"abc" ) echo "aと" | |
echo "bと" | |
echo "cだね!" | |
;; | |
"x" ) | |
echo "終了するよ!" | |
break | |
;; | |
* ) echo "「a,b,c,abc,x」だけっていってるじゃん" | |
;; | |
esac | |
done | |
echo '********** case文 終了 **********' | |
#見やすくするため5個改行 | |
for i in {1..5};do echo " ";done | |
#-------------------------------------------------------------- | |
# select文(bashのみ) | |
#-------------------------------------------------------------- | |
echo '********** select文(bashのみ) 開始 **********' | |
#ファイルの区切りを改行にする | |
IFS=$'\n' | |
echo "番号を選択して!10で終了するよ" | |
select i in `cat test.lst$$` | |
do | |
echo $i を選択したよ! | |
if [ "$i" = "XXX END" ]; | |
then | |
echo "終了!" | |
break | |
fi | |
done | |
echo '********** select文 終了 **********' | |
#見やすくするため5個改行 | |
for i in {1..5};do echo " ";done | |
#-------------------------------------------------------------- | |
# ファイル形式のチェック | |
#-------------------------------------------------------------- | |
echo '********** ファイル形式のチェック 開始**********' | |
cat << EOM | |
-b ファイル名 指定したファイルがブロックデバイスファイルなら真 | |
-c ファイル名 指定したファイルがキャラクタデバイスファイルなら真 | |
-d ファイル名 指定したファイルがディレクトリなら真 | |
-f ファイル名 指定したファイルが通常ファイルなら真 | |
-L ファイル名 指定したファイルがシンボリックリンクなら真 | |
-p ファイル名 指定したファイルが名前付きパイプなら真 | |
-S ファイル名 指定したファイルがソケットなら真 | |
EOM | |
echo '********** ファイル形式のチェック 終了**********' | |
#見やすくするため5個改行 | |
for i in {1..5};do echo " ";done | |
#-------------------------------------------------------------- | |
# ファイルパーミッションのチェック | |
#-------------------------------------------------------------- | |
echo '********** ファイルパーミッションのチェック 開始 **********' | |
cat << EOM | |
-g ファイル名 指定したファイルにSGIDがセットされていれば真 | |
-k ファイル名 指定したファイルにスティッキービットがセットされていれば真 | |
-r ファイル名 指定したファイルが読み取り可能なら真 | |
-u ファイル名 指定したファイルにSUIDがセットされていれば真 | |
-w ファイル名 指定したファイルが書き込み可能なら真 | |
-x ファイル名 指定したファイルが実行可能なら真 | |
EOM | |
echo '********** ファイルパーミッションのチェック 終了 **********' | |
#見やすくするため5個改行 | |
for i in {1..5};do echo " ";done | |
#-------------------------------------------------------------- | |
# その他のファイルのチェック | |
#-------------------------------------------------------------- | |
echo '********** その他のファイルのチェック 開始 **********' | |
echo '-e ファイル名 指定したファイルが存在すれば真' | |
echo '-s ファイル名 指定したファイルのファイルサイズが0より大きければ真' | |
echo '********** その他のファイルのチェック 終了 **********' | |
#見やすくするため5個改行 | |
for i in {1..5};do echo " ";done | |
#-------------------------------------------------------------- | |
# 文字列のチェック | |
#-------------------------------------------------------------- | |
echo '********** 文字列のチェック 開始 **********' | |
cat << EOM | |
-n 文字列 文字列の長さが0より大きければ真 | |
-z 文字列 文字列の長さが0であれば真 | |
文字列1 = 文字列2 2つの文字列が等しければ真 | |
文字列1 != 文字列2 2つの文字列が等しくなければ真 | |
EOM | |
echo '********** 文字列のチェック 終了 **********' | |
#見やすくするため5個改行 | |
for i in {1..5};do echo " ";done | |
#-------------------------------------------------------------- | |
# 数値のチェック | |
#-------------------------------------------------------------- | |
echo '********** 数値のチェック 開始 **********' | |
cat << EOM | |
数値1 -eq 数値2 2つの数値が等しければ真 | |
数値1 -ge 数値2 数値1が数値2以上であれば真 | |
数値1 -gt 数値2 数値1が数値2より大きいのであれば真 | |
数値1 -le 数値2 数値1が数値2以下であれば真 | |
数値1 -lt 数値2 数値1が数値2未満であれば真 | |
数値1 -ne 数値2 2つの数値が等しくなければ真 | |
EOM | |
echo '********** 数値のチェック 終了 **********' | |
#見やすくするため5個改行 | |
for i in {1..5};do echo " ";done | |
#-------------------------------------------------------------- | |
# 論理結合 | |
#-------------------------------------------------------------- | |
echo '********** 論理結合 開始 **********' | |
cat << EOM | |
!条件 条件が偽であれば真 | |
条件1 -a 条件2 条件1と条件2の両方が真であれば真 | |
条件1 -o 条件2 条件1と条件2のどちらかが真であれば真 | |
EOM | |
echo '********** 論理結合 終了 **********' | |
echo '' | |
echo '********** テスト用ファイルを削除 **********' | |
rm test.lst$$ | |
echo '********** END **********' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
サンプルシェルは「bash」「sh」「ksh」で共通で使えるものを書いてみた。
「sh」でselect文は使えないけど他の構文は普通に使えると思う。
実行時に必要になるファイルもサンプルシェル内で作成して、実行後には削除するようにしているので、お気軽に試してみるのもいいかと思う。
先頭行にある「インタープリタ指定」の部分を変更して「ksh」とか「sh」にしてみると色々試せる。
※「sh」に変更して実行するとselectのところで落ちるよ!