t0mmy

2020年12月30日に参加

学習履歴詳細

Shell Script 基礎

やったこと

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

  • &>
  • ヒアドキュメント
  • パイプ
  • コマンドのグループ化

学んだこと

&>

2>&> と同じ。
標準出力、および標準エラー出力を、リダイレクト先のファイルに書き出す。

& は、「マージする」のような意味。

  • 2>&1 ... 標準エラー出力を、標準出力にマージする

2>1 とすると、「標準エラー出力を、"1"という名前のファイルにリダイレクトする」という意味になる。

ヒアドキュメント

ヒアドキュメント中では、パラメータ展開が可能。

#!/bin/bash

greet='hello'

cat << HELLO
$greet
hoge
fuga
test
HELLO

パラメータを展開したくない場合、終了文字をシングルクォートでくくる。

<< の代わりに <<- を使用すると、ヒアドキュメント中の行頭タブが削除される。

<<< はヒアストリング。

以下のように記述することで、ヒアドキュメントを変数化できる。

#!/bin/bash

greet='hello'

sample=$(cat<< HELLO
$greet
hoge
fuga
test
HELLO
)

echo $sample

パイプ

標準出力、標準エラー出力の二つを、まとめてパイプできる。

ls /usr /xxx 2>&1 | less

上記コマンドは、以下の短縮形も存在する。

ls /usr /xxx |& less

コマンドのグループ化

{
  command
  command
  ...
}

以下二つのプログラムは同義。

#!/bin/bash

{
  date +%Y-%m-%d
  echo 'test'
  ls /usr
} > result.txt

cat result.txt
#!/bin/bash

date +%Y-%m-%d > result.txt
echo 'test' > result.txt
ls /usr > result.txt

cat result.txt

一行で書くときは、コマンドの後ろにセミコロンを書く。

$ { date +%Y-%m-%d; echo 'test'; ls /usr; } > result.txt

サブシェル () と区別して使用すること。

ShellScript

2022年06月18日(土)

2.0時間