サイドバーの壁紙
博主头像
tin博主等级

子の曰わく、我れ三人行なえば必ず我が師を得(う)。其の善き者を択びてこれに従う。其の善からざる者にしてこれを改む。

  • 累積執筆 73 記事
  • 累計作成 32 タグ
  • 累計受入 2 コメント

目 次CONTENT

記事目次

【Linux】シェル・シェルスクリプトの書き方(抜粋)

tin
tin
2023-03-16 / 0 コメント / 6 いいね! / 146 読み / 961 文字

はじめに

シェルスクリプトは「bash」「sh」「ksh」「csh」「tcsh」「zsh」などの種類があるそうです。
その違いと使い分けについてはさて置き、まずよく使われている書き方をまとめてみました。
また、使えるかどうかは自分の環境で確認するほうが良い。

1. 条件分岐について

#!/bin/sh
########################################################################
# 条件分岐について
########################################################################

1-1. 数値関係

#----------------------------------------------------------------------
# 数値関係
#    n1 -eq n2       : n1 =  n2    なら真
#    n1 -ne n2       : n1 != n2    なら真
#    n1 -lt n2       : n1 <  n2    なら真
#    n1 -le n2       : n1 <= n2    なら真
#    n1 -gt n2       : n1 >  n2    なら真
#    n1 -ge n2       : n1 >= n2    なら真
#----------------------------------------------------------------------

1-2. 文字列関係

#----------------------------------------------------------------------
# 文字列関係
#    -n str          : strが長さ0より大きいなら真
#    -z str          : strが長さ0なら真
#    str1 = str2     : str1とstr2が同じなら真
#    str1 != str2    : str1とstr2が同じではない場合は真
#----------------------------------------------------------------------

1-3. ファイル関係

#----------------------------------------------------------------------
# ファイル関係
#    -e file         : fileが存在するならは真
#    -s file         : fileが存在し、且つサイズが0より大きい場合は真
#    -f file         : fileが通常ファイルなら真
#    -d file         : fileがdディレクトリなら真
#----------------------------------------------------------------------

1-4. if⇒elif⇒else⇒fi構文

#----------------------------------------------------------------------
# if⇒elif⇒else⇒fi構文
if [ 条件1 ]; then
    # 条件1が真の場合に実行するコマンド
elif [ 条件2 ]; then
    # 条件2が真の場合に実行するコマンド
else
    # どの条件にも当てはまらない場合に実行するコマンド
fi
#----------------------------------------------------------------------

1-5. case構文

#----------------------------------------------------------------------
# case構文
case 条件 in
     値1)
          実行文1;;
     値2)
          実行文2;;
     *)
          実行文3;;
esac
#----------------------------------------------------------------------

2. ループについて

########################################################################
# ループについて
########################################################################

2-1. for in(1~5)

#----------------------------------------------------------------------
# 方法1
for i in {1..5}; do
    echo $i
done
#----------------------------------------------------------------------
# 方法2
for i in $(seq 1 5); do
    echo $i
done
#----------------------------------------------------------------------
# 方法3
LIST="1 2 3 4 5"
for i in $LIST;do
    echo $i
done
#----------------------------------------------------------------------

2-2. while(0~4)

#----------------------------------------------------------------------
i=0
while [ $i -lt 5 ]; do
    echo $i
    i=$((i + 1))
done
#----------------------------------------------------------------------

2-3. until(0~4)

#----------------------------------------------------------------------
i=0
until [ $i -ge 5 ]; do
    echo $i
    i=$((i + 1))
done
#----------------------------------------------------------------------

3. ファイルの読み込み

########################################################################
# ファイルの読み込み
########################################################################

3-1. while read line; do echo $line; done < input.txtをお勧め

#----------------------------------------------------------------------
# 方法1:お勧め
while read line; do
    echo $line
done < input.txt
#----------------------------------------------------------------------
# 方法2:使用上に用注意
STR_LST=`cat input.txt`
for line in $STR_LST; do
     echo $line;
done
# 注意事項:"1 apple 75"のような1行内容の場合、STR_LSTは3メンバーとなります。
#          スペースをメンバーの区切りと認識しているから。
#----------------------------------------------------------------------

4. 引数について

########################################################################
# 引数について
########################################################################
#----------------------------------------------------------------------
#  $0       シェルスクリプトのファイル名
#  $1       1 番目の引数
#  $2       2 番目の引数
#  $#       引数のかず
#  $*       全引数リスト(”$1 $2 … $n”)
#  $@      全引数リスト(”$1″ “$2” … “$n”)
#----------------------------------------------------------------------

5. 小さなデモ

5-1. シェル例:

[root@localhost demo]# cat demo.sh 
#!/bin/bash
# -nはテキストの末尾に改行を付けないように指定するオプションです
echo -n "Input a fruit: "
# 画面から入力した内容を受け
read fruit

case $fruit in
  apple)
    echo "It's an apple."
    ;;
  banana|orange)
    echo "It's a banana or an orange."
    ;;
  *)
    echo "It's neither an apple nor a banana nor an orange."
    ;;
esac
[root@localhost demo]#

5-2. テスト

[root@localhost demo]# sh demo.sh 
Input a fruit: apple
It's an apple.
[root@localhost demo]# sh demo.sh 
Input a fruit: orange	
It's a banana or an orange.
[root@localhost demo]# 
[root@localhost demo]# sh demo.sh 
Input a fruit: other
It's neither an apple nor a banana nor an orange.
[root@localhost demo]# 
6
  • 6

コメント欄