0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Bashの使い方

Posted at

Bashの使い方まとめ

特殊変数

変数 意味 補足
$0 シェルスクリプト名
$1-$9 1番目~9番目の引数
$* すべての引数 "$1 $2 $3" という1つの引数として展開される
$@ すべての引数 "$1" "$2" "$3" という複数の引数として展開される
$# 引数の数
$? 直前に実行したコマンドの終了ステータス 0は成功、0以外は失敗
$- シェルの実行オプション
$$ シェルのプロセスID
$! 最後に実行したバックグラウンドプロセスのPID
$_ 最後に実行したコマンドの最後の引数

エラー制御

エラーが発生時に終了(set -e

#!/bin/bash

set -e

A=a
B=b
C=c
echo $A | grep a
echo $B | grep a
echo $C | grep c
$ bash sete.sh 
a
$ echo $?
1

ただし、パイプの最後のコマンドが成功すれば成功とみなされる。

#!/bin/bash

set -e

A=a
B=b
C=c
echo $A | grep a
echo $B | grep a | echo OK
echo $C | grep c
$ bash test.sh 
a
OK
c
$ echo $?
0

set -eo pipefail を指定することで途中のエラーで終了する

#!/bin/bash

set -eo pipefail

A=a
B=b
C=c
echo $A | grep a
echo $B | grep a | echo OK
echo $C | grep c
$ bash test.sh 
a
OK
$ echo $?
1

未定義の変数を使用するとエラー(set -u

#!/bin/bash
A=1
echo $A
echo $B
set -u 
echo $A
echo $B
$ bash setu.sh
1

1
test.sh: 行 7: B: 未割り当ての変数です
$ echo $?
1

変数展開

パラメータ 意味 結果
${VAL} VALの値 VAL=value; echo ${VAL} value
${VAL:-def} VALが未設定ならdef unset VAL; echo ${VAL:-value} value
${VAL:=def} VALが未設定ならdefを代入 unset VAL; echo ${VAL:=value} value
${VAL:3} 3文字目以降を取得 VAL=value; echo ${VAL:3} ue
${VAL:1:2} 1文字目から2文字取得 VAL=value; echo ${VAL:1:2} al
${VAL#pattern} 最短一致のprefix除去 VAL=value; echo ${VAL#va} lue
${VAL##pattern} 最長一致のprefix除去 VAL=value; echo ${VAL##val} ue
${VAL%pattern} 最短一致のsuffix除去 VAL=value.sh; echo ${VAL%.sh} value
${VAL%%pattern} 最長一致のsuffix除去 VAL=value.tar.gz; echo ${VAL%%.gz} value.tar
${!VAL*} VALで始まる変数名一覧(ワイルドカード) 例略
${#VAL} VALの文字数 VAL=abc; echo ${#VAL} 3
${VAL/ptn/def} ptn部分をdefに1回だけ置換 VAL=abcabc; echo ${VAL/a/A} Abcabc
${VAL//ptn/def} ptn部分をdefにすべて置換 VAL=abcabc; echo ${VAL//a/A} AbcAbc
${VAL^} 最初の1文字を大文字化 VAL=value; echo ${VAL^} Value
${VAL^^} すべての文字を大文字化 VAL=value; echo ${VAL^^} VALUE
${VAL,} 最初の1文字を小文字化 VAL=Value; echo ${VAL,} value
${VAL,,} すべての文字を小文字化 VAL=VALUE; echo ${VAL,,} value

引数の解析(getopts

while getopts "abc:" opts
do
  case $opts in
    a)
      echo a
      ;;
    b)
      echo b
      ;;
    c)
      VALUE=${OPTARG}
      echo ${VALUE}
      ;;
  esac
done

制御文

if文

VAL=10
if [ $VAL -gt 5 ]; then
  echo "5より大きい"
elif [ $VAL -eq 5 ]; then
  echo "5と等しい"
else
  echo "5より小さい"
fi

case文

FRUIT="apple"
case "$FRUIT" in
  "apple")
    echo "りんご"
    ;;
  "banana")
    echo "バナナ"
    ;;
  *)
    echo "その他"
    ;;
esac

for文(数値)

for i in {1..5}
do
  echo "i=$i"
done

for文(配列)

arr=("one" "two" "three")
for item in "${arr[@]}"
do
  echo "$item"
done

while文

COUNT=1
while [ $COUNT -le 3 ]
do
  echo "COUNT=$COUNT"
  COUNT=$((COUNT + 1))
done

until文

VAL=0
until [ $VAL -gt 3 ]
do
  echo "VAL=$VAL"
  VAL=$((VAL + 1))
done

break / continue

for i in {1..5}
do
  if [ $i -eq 3 ]; then
    continue  # 3はスキップ
  fi
  if [ $i -eq 5 ]; then
    break     # 5で終了
  fi
  echo "i=$i"
done

&& / ||

[ -f "file.txt" ] && echo "ファイルあり" || echo "ファイルなし"
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?