0
0

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 3 years have passed since last update.

【Linux備忘録】シェルスクリプトでの変数var〜半角スペース、他注意点〜

Posted at

#前提条件

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.

#参考文献

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?