LoginSignup
0
1

More than 1 year has passed since last update.

【Linux】 Bashスクリプト

Last updated at Posted at 2022-05-30

入力を受け付ける。

・入力された値を変数INPUTに定義する。

echo -n "input:"
read INPUT
echo $INPUT

・シェルスクリプト実行時に渡される引数。

./test.sh Japan America China
echo $1
echo $2
echo $3

変数

・変数に文字列を定義する。

TEST="aiueo" 

・ダブルクウォートも文字列として定義する。。

TEST='"aiueo"'

・変数にコマンドの実行結果を定義する。

TEST=`ls -l`

特殊変数

変数名 自動的に設定される値
$? 直前に実行されたコマンドの終了ステータスが設定される変数
$! バックグラウンドで実行されたコマンドのプロセスID が設定される変数
$- set コマンドで設定されたフラグ、もしくはシェルの起動時に指定されたフラグの一覧が設定される変数
$$ コマンド自身の PID (プロセスID)が設定される変数
$# 実行時に指定された引数の数が設定される変数
$@ $* シェルスクリプト実行時、もしくは set コマンド実行時に指定された全パラメータが設定される変数
$LINENO この変数を使用している行の行番号が設定される変数
${PIPESTATUS[@]} パイプで連結した各コマンドの終了ステータスが設定される変数(配列)
$1, $2, …, ${10}, set コマンドもしくはシェルスクリプトの N個目の引数が設定される変数 (位置パラメータと呼ばれる)

・変数を参照する。

echo $TEST
echo ${TEST}

配列

・配列を定義する。

ARRAY=("Japan" "America" "China" "Korean")
ARRAY[0]="Japan"
ARRAY[1]="America"
ARRAY[2]="China"
ARRAY[3]="Korean"

・配列全体を参照する。

echo ${ARRAY[@]}

・インデックス番号で配列の要素を指定する。

echo ${ARRAY[0]}

if

ある条件に従って処理を分岐する。

・ディレクトリ(/ect)の有無を確認し、表示する値を条件分岐する。
ファイルの有無の確認の場合は、-fにする。

if [ -d /etc ]; then
    echo "ディレクトリが存在します。"
elif
    echo "ディレクトリが存在しません。"
else
    echo "その他"
fi

・数値の比較

比較演算子 内容
数値1 -eq 数値2 数値1と数値2が等しければ真(=)
数値1 -ne 数値2 数値1と数値2が等しくなければ真(!=、<>)
数値1 -gt 数値2 数値1が数値2よりも大きければ真(>)
数値1 -ge 数値2 数値1が数値2以上であれば真(>=)
数値1 -lt 数値2 数値1が数値2よりも小さければ真(<)
数値1 -le 数値2 数値1が数値2以下であれば真(<=)

・文字列の比較

比較演算子 内容
文字列1 = 文字列2 文字列1と文字列2が等しければ真
文字列1 != 文字列2 文字列1と文字列2が等しくなければ真
-n 文字列 文字列の長さが1以上であれば真
-z 文字列 文字列の長さが0であれば真

・複数の条件分岐(ADN、OR、NOT)

read INT

if [ $INT -ne 0 ] && [ $INT -le 30 ]; then
    echo "True"
else
    echo "False"
fi
条件 記載方法 内容
AND -a または && すべての条件式の結果が真の場合を返す
OR -o または
NOT ! 真偽を反転して返す

case

条件ごとに処理を分岐する。

・入力された値によって処理を分ける。(正規表現も可能。)

echo -n "input:"
read input

case "$input" in
    "1" ) echo "1が入力されました。";;
        [A-Z] ) echo "アルファベットが入力されました";;
        [0-9] ) echo "数字が入力されました";;
            * ) echo "上記以外";;
esac

while

条件式が成り立っている場合、繰り返し処理を行う。

・aと入力している場合のみ繰り返す

#!/bin/bash

read key
while [ "$key" = "a" ]
do
  echo "ok"
  read key
done

whileでインクリメントする方法。 (letでもexprのどちらでも可能。)

COUNT=0
while [ $COUNT -lt 10 ]
do
  echo ${COUNT}
 COUNT=`expr ${COUNT} + 1`
  let COUNT++
done

for

条件式が成り立っている間、繰り返し処理を行う。

・iが10以下になるまで繰り返す

#! /bin/bash
for ((i=1; i<=10; i++))
do
  echo "$i"
done

function

繰り返し利用するような処理をfunctionで関数化することでコードを短くすることができる。

・コマンドリスト関数の作成と呼び出し(function自体は省くこともできる。)

function command_list() {
   ls
}

command_list

参考

https://www.pasonatech.co.jp/workstyle/column/detail.html?p=7450

https://shellscript.sunone.me/while.html

https://shellscript.sunone.me/variable.html

0
1
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
1