Open3

shell

engineer rebornengineer reborn

基本

  • .shのファイル
  • \で改行
touch test.sh

#!/bin/bash

echo 'Hello world!' \
  'Like' \
  'Hoge'

➜  shell_test bash test.sh
Hello world! Like Hoge
  • ; で別々のコマンドとして判定
#!/bin/bash

echo 'Hello world!'; pwd; echo 'End world!';

変数


var='value'
echo $var
// ${}は変数展開
echo ${var}

// ""の有で hello world を一つの文字として認識
echo "${var}"

シングルとダブルクオート

// シングル
var1=value
var2='${var1}'
echo $var2
=> ${var1}

// ダブルクオート
var1=value
var2="${var1}"
echo $var2
=> value

引数

// $0はファイル名
#!/bin/bash

echo $0
echo $1

echo 'Hello world!' \
  'Like' \
  'Hoge'

➜  shell_test bash test.sh aa bb
test.sh
aa

配列

array=(item1 item2)

echo '${array[0]}': ${array[0]}
echo '${array[1]}': ${array[1]}

➜  shell_test bash array.sh 
${array[0]}: item1
${array[1]}: item2
➜  shell_test 

if

  • grepで testが test.shにあればsuccess
if grep -n test test.sh; then
  echo $?
  echo success
else
  echo $?
  echo fail
fi
  • 引数あり
    • [] 条件判定
if [ "$1" = "test" ]; then
  echo success
else
  echo fail
fi

// 結果
➜  shell_test bash if.sh 
fail
➜  shell_test bash if.sh test
success

for

array=(aaa 'bbb ccc' ddd)
for element in "${array[@]}"; do
    echo $element
done

リダイレクト

  • 標準入力: 0
  • 標準出力: 1
  • 標準エラー出力: 2

/dev/null

  • ブラックホール、エラーを握りつぶしたりする
engineer rebornengineer reborn

関連コマンド

awk

awk '{print $9}' などで shellとは全く別 && ""で囲うとまた意味が違う

sed

sed -E "s/-(20[0-9]{6}|[0-9]{8})\.log\.gz$//"

grep

grep [オプション] 検索パターン ファイル名 [ファイル名] #ファイル名は複数指定できる

tr

ls

  • l: 全てのデータ
  • S: sort
## -l
➜  shell_test ls -l
total 72
-rw-r--r--@ 1 akifumi.watanabe  staff     40  7  9 12:54 hoge.sh
-rw-r--r--@ 1 akifumi.watanabe  staff   6149  7  9 12:30 prd_log.txt
-rw-r--r--@ 1 akifumi.watanabe  staff  12114  7  9 00:29 test_log.txt
-rw-r--r--@ 1 akifumi.watanabe  staff  12114  7  9 00:30 test_log2.txt

## -S sort

➜  shell_test ls -l
total 72
-rw-r--r--@ 1 akifumi.watanabe  staff     40  7  9 12:54 hoge.sh
-rw-r--r--@ 1 akifumi.watanabe  staff   6149  7  9 12:30 prd_log.txt
-rw-r--r--@ 1 akifumi.watanabe  staff  12114  7  9 00:29 test_log.txt
-rw-r--r--@ 1 akifumi.watanabe  staff  12114  7  9 00:30 test_log2.txt
➜  shell_test ls -lS
total 72
-rw-r--r--@ 1 akifumi.watanabe  staff  12114  7  9 00:29 test_log.txt
-rw-r--r--@ 1 akifumi.watanabe  staff  12114  7  9 00:30 test_log2.txt
-rw-r--r--@ 1 akifumi.watanabe  staff   6149  7  9 12:30 prd_log.txt
-rw-r--r--@ 1 akifumi.watanabe  staff     40  7  9 12:54 hoge.sh

jq

  • json
    • '{"level": "aaa", "message": "value"}'

sort
uniq
head