🍃このブログは移転しました。
3秒後、自動的に移動します・・・。

シェルスクリプト作成のメモ

仕事でちょっと楽するために書いたんですけど、事前知識が全くないせいでヒドい目に・・。
ちょっとずつでもできるようになるべく、覚えたことのメモ!

引数の扱い

コマンドに渡した引数は、

$1 # 1つ目の引数
$2 # 2つ目の引数
# $n nつ目の奇数

というように $n で取得できる。

変数の扱い

hoge=1
echo ${hoge}
  • いきなり宣言できる
  • aliasとかと一緒で=の左右は開けちゃダメ
  • 参照するときは${…}のようにする

ファイルパス関連

fullpath=/~/git/hoge/index.html

# フルパスからパス、ファイル名、拡張子を取得
path=${fullpath%/*}  # ~/git/hoge
name=${fullpath##*/} # index.html
ext=${fullpath##*.}  # html

これは便利だわ・・・。

終了ステータス

普段何気なく実行してるコマンドには終了ステータスというものがあって、

  • 成功なら0
  • そうでなければ0以外

を返すようになってるそうな。

mkdir hoge && cd hoge

mkdir foo && mkdir poo && cd boo
# ↑ boo/ なんてものはないので、 foo/ poo/ だけ作成して終了

みたいに出来るのは、このステータスでもって実行するかの判断をしている、と。

# …
# …
exit 0

スクリプトの最後はコレで終わるように。

IF文

ext="css"

if [ "${ext}" = "css" ]; then
  echo "Css!"
elif [ "${ext}" = "js" ]; then
  echo "JavaScript!"
else
  echo "What is this?!"
fi
  • "[" の前後にスペースあけないとダメ
  • ";" が変な位置にあるって思っちゃうけどあってる
  • else ifじゃなくてelif
  • シングルクォートではなくダブルクオートのほうが無難ぽい

ファイルを引数にとってループ

justShow.sh hoge fuga piyo

みたいに引数を順に処理したい場合

# $@ で引数が全部取れる
for arg in $@
do
  echo ${arg}
done

うーん、JavaScriptしか知らないと中々文法にも慣れないですね・・。
ここらはもっとちゃんと時間とって勉強しようと思ってます。