はじめに
Linux初学者である自分向け用の記事です。[Udemyの動画講座]を参考にしました。
僕の勉強法は動画を見る
→実際に動かしてみる
→問題演習
という流れです。
前回まで:[Linux入門 1-3]
2. シェルスクリプト(問題、テスト、演習、発展問題)
ファイル作成(viコマンドで拡張子は.sh)
実行(※とても重要!!設定を忘れない!)
$ chmod 755 ファイル名 #パーミッション変更
シェルスクリプトの実行
$ ./test.sh
2-1. 変数の使い方
ex1)変数の基本
ファイルの中身
実行
ex2)コマンドの実行1
ファイルの中身
実行
ex3)コマンドの実行2
ファイルの中身
実行
ex4)システム変数
ファイルの中身
実行
2-2. 引数の使い方
引数・・・実行する際にシェルに渡す値
./test.sh a b #a,bが引数
ex1)base4_1.sh
ファイルの中身
実行
ex2)base4_2.sh(ほかのbashファイルを実行する場合)
ファイルの中身
実行
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]
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)標準入力
ファイルの中身
実行
ex2)3個変数を設定
ファイルの中身
実行
ex3)文字付きの標準入力
ファイルの中身
実行
ex4)シークレットモードでの標準入力
ファイルの中身
実行
ex5)配列(Array)入力
ファイルの中身
実行
ファイル入出力
>: 上書き
echo ‘hello’ > test.txt # 現在いるディレクトリのhello.txtファイルを作成(上書き)してhelloを書き込む
>>: 追記 # 現在いるディレクトリのtest.txtファイルを作成(追記)してhelloを書き込む
2-5. 制御文(if, case, switch)
if文の書き方(3通り)
① if test 条件文; ② if [ 条件文 ]; ③ if [[ 条件文 ]];
ex1)
ファイルの中身
実行
ex2)
ファイルの中身
実行
ex3)比較
#文字列で等しいか等しくないか
= !=
# 数値比較
-eq(=), -ne(!=), -lt(<), - le(≦), –gt(>), –ge(≧)
ファイルの中身
実行
ex4)条件文1 and 条件文2の場合、条件文1,条件文2を両方満たす場合に実行
書き方は、以下の4通り
if [ 条件文1 ] && [ 条件文2 ];
if [ 条件文1 –a 条件文2 ];
if [[ 条件文1 && 条件文2 ]];
if test 条件文1 && test 条件文2;
ex5)条件文1 or 条件文2の場合、条件文1,条件文2のどちらかを満たす場合に実行
書き方は、以下の4通り
if [ 条件文1 ] || [ 条件文2 ];
if [ 条件文1 –o 条件文2 ];
if [[ 条件文1 || 条件文2 ]];
if test 条件文1 || test 条件文2;
if ! test 条件文、 if [ ! 条件文 ]、if [[ ! 条件文 ]]
ex7)コマンド処理の条件文
cmd1 && cmd2 #cmd1が正しく実行されたらcmd2を実行
cmd1 || cmd2 #cmd1がエラーならcmd2を実行
cmd1 && cmd2 || cmd3 #cmd1が正しく実行されたらcmd2が実行されて、cmd1がエラーならcmd3を実行
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より古いか
小テスト
小テスト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
ex2)
• まず、現在いるディレクトリのファイル一覧を表示します
• 2回、値を標準入力で受け付けて、変数に設定します
• 1つ目の入力がファイル名とし、2つ目の入力は任意の値としま
す。
• ファイルが存在する場合は、そのファイルに2つ目の値を追記
します。
• ファイルが存在しない場合は、「ファイルが存在しません」と
表示してください。
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