t0mmy

2020年12月30日に参加

学習履歴詳細

Shell Script 基礎

やったこと

書籍「新しいシェルプログラミングの教科書」

  • process置換
  • 履歴展開
  • if文

学んだこと

process置換

<(任意のコマンド)

例) 何らかのコマンド結果の diff を取る。

diff <(cat w1) <(cat w2) 

履歴展開

! で始まるコマンド群。

  • !! で、直前に実行したコマンドを参照
  • !n で、n番目に実行したコマンドを参照
    • history コマンドや、 ~/.bash_history ファイルから、コマンドの実行順番を取得する
  • !-n で、現在からn個前のコマンドを参照
  • !any_string で、 any_string から始まる最後のコマンドを参照

if文

#!/bin/bash

if cd $1; then
  echo 'YES'
else
  echo 'NO'
fi

第一引数にて cd に成功するとtrue、失敗するとfalse。
成功しても、ディレクトリの移動は発生しない。

また、 if で登場する [ は、 test コマンドの短縮形。
そのため、 [ を使用する場合、 test コマンドのオプションをそのまま使用できる。

#!/bin/bash

if [ -a $1 ];then
  echo exists.
else
  echo not exists.
fi

if文 気になった注意点

記号をシングルクォートで囲む

#!/bin/sh

str1='abc'
str2='123'

/* '<' のシングルクォートがない場合、エラーとなる*/
if [ $str1 '<' $str2 ]; then
  echo 'str1 < str2'
else
  echo 'str1 >= str2'
fi

これは、条件評価で使用する < > () 辺りの記号が、Linuxコマンドにおける特別な意味(リダイレクトなど)と解釈されるため。
test コマンドに、 '<という文字列'ということを教えるために、シングルクォートで囲む必要がある。

if文の中で何も処理を書かない場合、エラーとなる

#!/bin/sh

str1='abc'
str2='123'

/* ifの条件式がtrueの時の処理がないため、エラー */
if [ $str1 '<' $str2 ]; then
else
  echo 'str1 >= str2'
fi

'何もしない' という処理を書く場合、 : (ヌルコマンド)を記載する。

ShellScript

2022年06月13日(月)

1.0時間