3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Linux入門 2-1 シェルスクリプトの基礎(/bin/bash)

Last updated at Posted at 2021-11-30

はじめに

Linux初学者である自分向け用の記事です。[Udemyの動画講座]を参考にしました。
僕の勉強法は動画を見る実際に動かしてみる問題演習という流れです。

前回まで:[Linux入門 1-3]


2. シェルスクリプト(問題、テスト、演習、発展問題)

サポートしているシェルを一覧表示
image.png

ファイル作成(viコマンドで拡張子は.sh)
image.png
image.png
実行(※とても重要!!設定を忘れない!)

$ chmod 755 ファイル名 #パーミッション変更

シェルスクリプトの実行

$ ./test.sh
2-1. 変数の使い方

ex1)変数の基本
ファイルの中身
image.png
実行
image.png
ex2)コマンドの実行1
ファイルの中身
image.png
実行
image.png
ex3)コマンドの実行2
ファイルの中身
image.png
実行
image.png
ex4)システム変数
ファイルの中身
image.png
実行
image.png

2-2. 引数の使い方

引数・・・実行する際にシェルに渡す値

./test.sh a b #a,bが引数

ex1)base4_1.sh
ファイルの中身
image.png
実行
image.png
ex2)base4_2.sh(ほかのbashファイルを実行する場合)
ファイルの中身
image.png
実行
image.png

2-3. 配列の使い方

配列の作成

fruits=('banana' 'apple' 'grape')

配列の表示方法

# 配列の中身をすべて表示
echo "${fruits[@]}"
# インデックス0の要素を表示
echo "${fruits[0]}"
# インデックスを表示
echo "${!fruits[@]}"
# 配列の要素の数を表示
echo "${#fruits[@]}"
# 配列のインデックス3にlemonを追加
fruits[3]='lemon'
# 配列のインデックス2を削除
unset fruits[2]

ex1)
ファイルの中身
image.png
実行
image.png

2-4. 標準入出力、ファイル入出力
標準入出力

標準入力: ターミナルからの値の読み取り
標準出力: ターミナルでの値の表示

read var # 標準入力
echo var1 = $var # 入力結果表示
read var1 var2 var3 # 入力結果から3個変数を設定
echo var1 = $var1, var2 = $var2, var3 = $var3
read –p ‘var1 : ’ var1 # 文字付きの標準入力
read –sp ‘password : ‘ password # シークレットモードでの標準入力
read –a names # 配列(Array)入力

ex1)標準入力
ファイルの中身
image.png
実行
image.png
ex2)3個変数を設定
ファイルの中身
image.png
実行
image.png
ex3)文字付きの標準入力
ファイルの中身
image.png
実行
image.png
ex4)シークレットモードでの標準入力
ファイルの中身
image.png
実行
image.png
ex5)配列(Array)入力
ファイルの中身
image.png
実行
image.png

ファイル入出力
>: 上書き
echo ‘hello’ > test.txt # 現在いるディレクトリのhello.txtファイルを作成(上書き)してhelloを書き込む
>>: 追記 # 現在いるディレクトリのtest.txtファイルを作成(追記)してhelloを書き込む

ex1)
ファイルの中身
image.png
実行
image.png

2-5. 制御文(if, case, switch)

if文の書き方(3通り)
① if test 条件文; ② if [ 条件文 ]; ③ if [[ 条件文 ]];
ex1)
ファイルの中身
image.png
実行
image.png
ex2)
ファイルの中身
image.png
実行
image.png
ex3)比較

#文字列で等しいか等しくないか
= != 
# 数値比較
-eq(=), -ne(!=), -lt(<), - le(≦), –gt(>), –ge(≧)

ファイルの中身
image.png
実行
image.png
image.png
image.png
ex4)条件文1 and 条件文2の場合、条件文1,条件文2を両方満たす場合に実行

書き方は、以下の4通り
if [ 条件文1 ] && [ 条件文2 ];
if [ 条件文1 –a 条件文2 ];
if [[ 条件文1 && 条件文2 ]];
if test 条件文1 && test 条件文2;

ファイルの中身
image.png
実行
image.png

ex5)条件文1 or 条件文2の場合、条件文1,条件文2のどちらかを満たす場合に実行

書き方は、以下の4通り
if [ 条件文1 ] || [ 条件文2 ];
if [ 条件文1 –o 条件文2 ];
if [[ 条件文1 || 条件文2 ]];
if test 条件文1 || test 条件文2;

ファイルの中身
image.png
実行
image.png
ex6)否定を表す条件文(3つ)

if ! test 条件文、 if [ ! 条件文 ]、if [[ ! 条件文 ]]

ファイルの中身
image.png
実行
image.png

ex7)コマンド処理の条件文
cmd1 && cmd2 #cmd1が正しく実行されたらcmd2を実行
cmd1 || cmd2 #cmd1がエラーならcmd2を実行
cmd1 && cmd2 || cmd3 #cmd1が正しく実行されたらcmd2が実行されて、cmd1がエラーならcmd3を実行

実行
image.png
image.png

ex8)ファイルの存在チェック
if [ -e ファイル名 ]; #ファイルもしくはディレクトリの存在確認
then
else
fi

if [ -f ファイル名 ] #ファイルが存在しディレクトリでなくファイル
if [ -d ファイル名 ] #ディレクトリが存在するか
if [ -s ファイル名 ] #ディレクトリ or 中身のあるファイルか
if [ -wファイル名 ] #書き込み権限あるか
if [ -xファイル名 ] #実行権限あるか
if [ fileA –nt fileB] #fileAがfileBより新しいか
if [ fileA –ot fileB] #fileAがfileBより古いか

ファイルの中身
image.png
実行
image.png

小テスト

小テスト1)
次のうちShellScriptで正常終了を表すものはどれでしょうか?

exit 0

ShellScriptでは戻り値0が正常を意味します。また、シェルの終了にはexitを実行します。

小テスト2)
コマンドlsの結果を変数varに格納するにはどのように記載すればよいでしょうか?

var=`ls`

変数にコマンド実行結果を格納するにはバッククォート(`)もしくは$(command)とします。

小テスト3)
ShellScriptで配列arrayの長さを表す書き方はどれでしょうか?

${#array[@]}

これが配列の長さを表します

小テスト4)
全引数を表す変数はどれでしょうか?

$@

これは全引数を表す変数です

小テスト5)
標準入力でvarに値を設定するにはどのように記載すればいいでしょうか?

read var

readコマンドを用いるとvarに標準入力で値を設定できます

小テスト6)
if文の書き方として正しいものを選んで下さい

if [ condition ];
then
fi

[]を使用した正しいif文の書き方です。ifの後とcondition前後に空白を入れてください

小テスト7)
ファイルの存在を確認するif文を選択してください

if [ -f file.txt ]

ディレクトリでなくファイルの存在チェックは-fを用います

#### 演習問題


ex1)
• 引数を2つ取ります
• 1つ目の引数が性別(man, woman)、2つ目の引数が年齢(age)
• 第1引数がmanの場合、Manと表示、womanの場合Womanと表示
• 第2引数が20未満の場合Child、20以上60未満の場合Adult、60以上 の場合はElderlyと表示してください。
• 標準出力はコロン(:)でつないで表示してください。例えば
Man:Adult, Woman:Childと表示します。
• 以下の場合はexit 1で終了してください。
• 引数が2つでない場合
• 1つ目の引数がman woman以外の場合
• 2つ目の引数が0以上でない場合
./ex1.sh man 20 => Man:Adult
./ex1.sh woman 70 => Woman:Elderly
./ex1.sh man 15 => Man:Child


ex1 Answer)
image.png
実行結果
image.png


ex2)
• まず、現在いるディレクトリのファイル一覧を表示します
• 2回、値を標準入力で受け付けて、変数に設定します
• 1つ目の入力がファイル名とし、2つ目の入力は任意の値としま
す。
• ファイルが存在する場合は、そのファイルに2つ目の値を追記
します。
• ファイルが存在しない場合は、「ファイルが存在しません」と
表示してください。


ex2 Answer)
image.png
実行結果
image.png


To Be Continued...
[Linux入門 2-2] へ



[Linux Professional Institute公式HP]:https://www.lpi.org/ja/our-certifications/lpic-1-overview
[Udemy]:https://udemy.benesse.co.jp/career/workstyle/lpic-interview-company.html
[Udemyの動画講座]:https://www.udemy.com/course/linuxlpic/?utm_source=bene-content-marketing&utm_campaign=normal&utm_content=story&utm_term=career&utm_medium=udemyads
[Linux入門 1-3]:https://qiita.com/hoglet/items/433e3bc2e3d7be88bc1b
[Linux入門 2-2]:https://qiita.com/hoglet/items/4210fe95f8dfb7067b74

3
2
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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?