
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時間