Skip to content

Instantly share code, notes, and snippets.

@brokendish
Created February 12, 2012 12:23
Show Gist options
  • Save brokendish/1808250 to your computer and use it in GitHub Desktop.
Save brokendish/1808250 to your computer and use it in GitHub Desktop.
シェルスクリプト(bash,ksh,sh)で共通して使える部分の基本
#!/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 **********'
@brokendish
Copy link
Author

サンプルシェルは「bash」「sh」「ksh」で共通で使えるものを書いてみた。

「sh」でselect文は使えないけど他の構文は普通に使えると思う。
実行時に必要になるファイルもサンプルシェル内で作成して、実行後には削除するようにしているので、お気軽に試してみるのもいいかと思う。
先頭行にある「インタープリタ指定」の部分を変更して「ksh」とか「sh」にしてみると色々試せる。
※「sh」に変更して実行するとselectのところで落ちるよ!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment