bashもcshもみんな集まれ
Linuxカーネルがシェルを実行するとき、Linuxカーネルはシェルファイルの先頭行を確認します。
先頭行に#!がある場合、Linuxカーネルは後ろに続く文字列を実行します。
例えば、#!/bin/bashと書かれている場合は、/bin/bashを実行します。
シェルファイルをbashで実行したい場合、シェルの先頭行に#!/bin/bashと記述します。
bash
#!/bin/bash
echo "Hello World!"
シェルファイルをcshで実行したい場合、シェルの先頭行に#!/bin/cshと記述します。
csh
#!/bin/csh
echo "Hello World!"
シェルファイルにshebang(シバン)が書かれている場合は、以下の方法で実行することができます。
.はカレントディレクトリを意味します。つまり相対パス指定です。
bash
./sample.sh
以下のように絶対パス指定で実行することもできます。
bash
/home/user1/work/sample.sh
シェルファイルにshebang(シバン)が書かれていない場合でもbash指定で実行したい場合は以下の方法で実行できます。
bash
#方法1
bash sample.sh
#方法2(相対パス)
bash ./sample.sh
#方法3(絶対パス)
bash /home/user1/work/sample.sh
bashでは以下のように変数定義します。
bash
hensu="apple"
cshでは以下のように変数定義します。
cshで変数定義するにはsetコマンドが必要です。
csh
set hensu="apple"
bash
#!/bin/bash
hensu="apple"
if [ ${hensu} = "apple" ]; then
    echo "true"
else
    echo "false"
fi
実行結果
実行結果
$ ./if.sh
true
bashはfor文で、cshはforeach文です。
bash
#!/bin/bash
hensu="apple lemon banana"
for i in ${hensu}
do
    echo ${i}
done
実行結果
実行結果
$ ./for.sh
apple
lemon
banana
csh
#!/bin/csh
set hensu="apple lemon banana"
foreach f (${hensu})
    echo ${f}
end
実行結果
実行結果
$ ./for.sh
apple
lemon
banana
以下は配列リストの値をfor文で1つずつ渡して各ケースに当てはめた例です。
bash
#!/bin/bash
hensu="apple lemon banana grape"
for i in ${hensu}
do
    case ${i} in
      "apple")
        echo "appleです"
        ;;
      "lemon")
        echo "lemonです"
        ;;
      "banana")
        echo "bananaです"
        ;;
      *)
        echo "どれでもありません。"
        ;;
    esac
done
実行結果
実行結果
$ ./case.sh
appleです
lemonです
bananaです
どれでもありません。