#前提条件
OS
MacOS Monterey 12.0.1
CPU
Apple M1(arm64)
Docker
Docker Desktop 4.2.0 (70708)
CentOS
CentOS Linux release 7.9.2009 (AltArch)
※Dockerで構築したCentOS環境で、シェルスクリプトの作成練習をしています。
#やりたいこと
1 変数varに引数を渡す
2 条件分岐させ、渡した引数が
①自分の名前なら「お前の名前だな」
②それ以外なら「誰だお前は?」
と返事させる
というしょーもない練習用のシェルスクリプトを作ります。
#つまづいた話
半角スペースの有無が原因で動作せず地味にハマったので、備忘録がてら。ちょいネタです。
※記事の最後に、半角スペース云々以外で「実行権限付与」(注意点1)と「ファイル名を指定して実行」(注意点2)を載せてます。参考までに。
#正しい例
#!/bin/bash
# ※※このvarに注目!!
var=$1
if [ $var = "ryohey" ];
then
echo 'This is your name.'
else
echo 'Who are you?'
fi
if文の書き方・シェルスクリプトの書き方については、ここでは省略します。
自分の名前を入力すれば、
[Udemy@0a412e1af0a1 ~]$ ./base6_test.sh ryohey
This is your name.
それ以外のことを入力すると、
[Udemy@0a412e1af0a1 ~]$ ./base6_test.sh qiita
Who are you?
欲しい返事をくれます。
#誤った例
#!/bin/bash
# ※※varや=の後に半角スペースを入れた場合!!
var = $1
if [ $var = "ryohey" ];
then
echo 'This is your name.'
else
echo 'Who are you?'
fi
○正しい例)
var=$1
×誤った例)
var = $1
こうしてしまうと、自分の名前を打っているにもかかわらず、
[Udemy@0a412e1af0a1 ~]$ ./base6_test.sh ryohey
./base6_test.sh: line 3: var: command not found
./base6_test.sh: line 5: [: =: unary operator expected
Who are you?
エラーを吐かれ、「お前は誰だ?」の方が出力されてしまいます。
半角スペースの有無だけの違いですが、スペースを入れたことで、varが変数varだと認識されなくなったようです。
気付くまで数分かかったので一応記事にしました。
お役に立てれば幸いです。
不適当な説明などあれば、ご指摘ください。
ありがとうございましたm(_ _)m
#注意点1
作成したシェルスクリプトは、忘れずに実行権限を付与してから実行してください。
[Udemy@0a412e1af0a1 ~]$ chmod 755 base6_test.sh
chmodコマンド
(CHange MODe)
アクセス権を変更するコマンドです。ここではchmodの後に「755」を続けることで、所有者に実行権('x'で表されます)を付与しています。
以下で確認します。
[Udemy@0a412e1af0a1 ~]$ ls -l base6_test.sh
-rwxr-xr-x 1 Udemy Udemy 113 Dec 2 07:29 base6_test.sh
-rwxr
↑一番最初のこの「x」です。x=eXecute(実行)権限があるということです。
もし実行権限を付与しないまま実行しようとすると、
[Udemy@0a412e1af0a1 ~]$ ./base6_test.sh ryohey
-bash: ./base6_test.sh: Permission denied
権限がないと怒られます。
※パーミッションの管理について、ここでは割愛します。
#注意点2
作成したシェルスクリプトを実行するときは、相対パス(または絶対パス)でファイル名を指定しないと、動いてくれません。
※パス指定しない場合、
[Udemy@0a412e1af0a1 ~]$ base6_test.sh ryohey
-bash: base6_test.sh: command not found
ファイルが見つかりませんので、以下のように指定します。
相対パス
[Udemy@0a412e1af0a1 ~]$ ./base6_test.sh ryohey
This is your name.
絶対パス
[Udemy@0a412e1af0a1 ~]$ /home/Udemy/base6_test.sh ryohey
This is your name.
#参考文献