はじめに
前回に引き続き、Linuxのシェルスクリプの基礎知識についてまとめていきます。
変数の使い方
変数の値を参照するには、変数名の前に$
をつけます。
test.sh
#!/bin/bash
appdir=/home/tochi/myapp
echo $appdir
変数の書き方についての注意
- 代入時は
$
はつけないこと - =の前後にはスペースを入れない
- 変数名に利用できる文字はアルファベットと数値、アンダースコアだけ
- 変数名の区切りは明示する
※区切りを明確にするときは、変数の部分を{}で囲む
クォーティング
シングルクォートとダブルクォートの違いについて、シングルクォートでは$
はそのまま$記号として表現されます。
test.sh
#!/bin/bash
country=Japan
echo 'I live in $country'
echo "I live in $country"
terminal
% ./test.sh
I live in $country
I live in Japan
コマンド置換
コマンド置換では、コマンドの結果を文字列として取得することができます。
なお、これはダブルクォートの中でも有効です。
terminal
% echo "Today is $(date '+%Y-%m-%d')"
Today is 2021-06-09
位置パラメータ
こちらは簡単にまとめておきます。
詳しくはこちらの記事が分かりやすかったです。
http://se.cite.ehime-u.ac.jp/~aman/memo/bash/shell_prog1.html
変数 | 内容 |
---|---|
$0 | 実行時のシェルスクリプト |
$1 ,$2 ,, |
コマンドライン引数の値 |
$# | 位置パラメータの個数 |
$@ | 全ての位置パラメータ、それぞれの位置パラメータがダブルクォートで囲まれる |
$* | 全ての位置パラメータ、全体が一つの文字列としてダブルクォートで囲まれる |
条件分岐
if文
if文ではifの後ろにはコマンドをおきます。
if <コマンド1>; then
#処理内容
elif <コマンド2>; then
#処理内容
fi
以下に簡単な例と評価演算子をまとめておきます。
#!/bin/bash
int1=$1
if [ "$int1" -gt 3 ] && [ "$int1" -lt 6 ]; then
echo "int1 > 3 and int1 < 6"
fi
演算子 | 内容 |
---|---|
文字列に関する評価演算子 | |
s1 = s2 | 等しい |
s1 != s2 | 等しくない |
-n s1 | 空文字列ではない |
-z s1 | 空文字である |
数値に関する演算子 | |
i1 -eq i2 | 等しい |
i1 -ne i2 | 等しくない |
i1 -lt i2 | i1がi2より小さい |
i1 -le i2 | i1がi2以下 |
i1 -gt i2 | i1がi2より大きい |
i1 -ge i2 | i1がi2以上 |
ファイル属性に関する評価 | |
-e file | fileが存在する |
-d file | fileは存在し、ディレクトリである |
-h file | fileは存在し、シンボリックリンクである |
-L file | 同上 |
-f file | fileは存在し、通常のファイルである |
-r file | fileは存在し、読み取りパーミッションが与えられている |
-w file | fileは存在し、書き込みパーミッションが与えられている |
-x file | fileは存在し、実行パーミッションが与えられている |
file1 -nt file2 | file1の変更時刻がfile2より新しい |
file1 -ot file2 | file1の変更時刻がfile2より古い |
演算子の結合 | |
条件式1 -a 条件式2 | 両方が真の場合に真 |
条件式1 -o 条件式2 | どちらかが真の場合に真 |
!条件式 | 真偽を逆にする |
繰り返し構文
for文
for文は以下のように使用します。
terminal
for 変数名 in リスト
do
繰り返す処理
done
#!/bin/bash
for name in tanaka yamada toda
do
echo $name
done
#実行結果は以下
tanaka
yamada
toda
リスト部分には、コマンド置換をおくことも可能です。
シェル関数
関数は以下のように定義します。
function 関数名 ()
{
#処理
}
省略形としてfunctionの部分を省くことも可能です。
おわり
かなりざっくりまとめました。
これらの基礎知識を使って、どんなことができるか次回以降まとめていきたいと思います。