コンテンツにスキップ

Bash スクリプト

基本

1
2
$ touch ./script.sh
$ chmod a+x ./script.sh
script.sh
1
2
3
#!/bin/bash

echo Hello
1
2
$ ./script.sh
Hello

標準エラー出力

script.sh
1
2
3
#!/bin/bash

echo Error >&2
1
2
$ ./script.sh
Error

変数

script.sh
1
2
3
4
5
#!/bin/bash

VERSION="1.0.0"

echo $VERSION
1
2
$ ./script.sh
1.0.0

コマンドライン引数

./script.sh
1
2
3
4
5
6
7
#!/bin/bash

VERSION=1.0.0
OPTION=$1

echo FILENAME=$FILENAME
echo OPTION=$OPTION

if 文

bash に boolean 型は存在しない。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/bash

INITIALIZE="true"

if [ "$INITIALIZE" = "true" ]; then
    # 初期設定
    echo "INITIALIZE is true"
else
    echo "INITIALIZE is not true"
fi

for 文

改行区切りの文字列でループさせる

1
2
3
4
5
6
7
ORG_IFS=$IFS
IFS=$'\n'
arrays=($URL)
for i in "${arrays[@]}";do
    ../yt-dlp "$i"
done
IFS=$ORG_IFS

echo で管理者権限の必要なファイルを書き込む

以下の 2 通りある。teeを使う方はechoの内容がターミナルにも標準出力される。

1
$ sudo sh -c "echo \"abc\" > /path/to/file"
1
$ echo "abc" | sudo tee /path/to/file

コマンドの戻り値を標準出力する

1
$ ls -l; echo $? # 0とかが出力される

スクリプトのカレントディレクトリをスクリプトの存在するディレクトリにする

1
cd `dirname $0`

yyyyMMddHHmmss

1
2
TIMESTAMP=$(date +"%Y%m%d%H%M%S")
echo $TIMESTAMP