自分以外が書いたシェルスクリプト

if [ -n "`echo "$1" | awk '/^((hoge)|(hoge[0-9][0-9]))$/'`" ]

解読。

下書きに残っていたので投稿。

いつも使っているシェルスクリプトがある。 こんなスクリプトがあった。

if [ -n "`echo "$1" | awk '/^((hoge)|(hoge[0-9][0-9]))$/'`" ]

-n test -n string string の文字列長が 0 より大ならば真となる。

つまり

[astel@MacBook-Pro 15:06:47 ] $ cat test.sh 
#!/bin/sh
HOGE=test
if [ -n "$HOGE" ]; then
   echo "no"
fi
[astel@MacBook-Pro 15:06:50 ] $ sh test.sh
no

-n のオプションの意味は値が入っていれば真となる。 ということっぽい

`echo "$1" | awk '/^((hoge)|(hoge[0-9][0-9]))$/'`

(バッククオート)で囲んでいるのでコマンド?として打った値を使うという意味(だと思っている 例えばdate とかdate=date`とかやると日付の値がでるのでそんな意味であってる(はず

echo

文字を出すコマンド 大抵1行とか簡単な時しか使わない

"$1"

引数の一つ目

$ hogehoge.sh test

とコマンドを打つとtestが$1に入る

|

別のコマンドを足して使う感じ

説明難しい 表示した中からpiyoの値をとったりするとき cat hoge.txt | grep piyo とかで使う。

awk

文字を切り出したりする 便利

'/^((hoge)|(hoge[0-9][0-9]))$/'

/

任意の文字列を正規表現で表すことができます。 /正規表現/

^

最初の文字を指定している

*1

hogeという文字かhoge**という文字か

(hoge[0-9][0-9])

[0-9]は0~9の値の何かを示す それが二つあるので00~99までの値が入っていれば真

$

行の末尾は $ で表します。

結論

if [ -n "`echo "$1" | awk '/^((hoge)|(hoge[0-9][0-9]))$/'`" ]

引数の一つ目に、hogeかhoge00~99のうちどれかの数字が入ってる時は真を返すスクリプトである。

見直してみると全然複雑ではないスクリプトでしたね。

*1:hoge)|(hoge[0-9][0-9]