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

Pocket

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]))$/'

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

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

((hoge)|(hoge[0-9][0-9]))
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のうちどれかの数字が入ってる時は真を返すスクリプトである。

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

コメントを残す

メールアドレスが公開されることはありません。