シェル变量


変数を定義するときは、次のように変数名にドル記号 ($、PHP 言語の変数に必要) を追加しないでください。

your_name="php.cn"

変数名と等号の間にスペースを入れることはできないことに注意してください。これは、あなたがよく知っているすべてのプログラミング言語とは異なる場合があります。同時に、変数名の命名は次の規則に従う必要があります:

  • 最初の文字は文字 (a ~ z、A ~ Z) である必要があります。

  • 間にスペースを入れることはできません。アンダースコア (_) を使用できます。

  • 句読点は使用できません。

  • bash のキーワードは使用できません (予約されたキーワードを表示するには help コマンドを使用できます)。

明示的な直接割り当てに加えて、次のようなステートメントを使用して変数に値を割り当てることもできます。

for file in `ls /etc`

上記のステートメントは、/etc の下のディレクトリ内のファイル名をループアウトします。


変数の使用

定義された変数を使用するには、次のように変数名の前にドル記号を追加します。

your_name="qinjx"
echo $your_name
echo ${your_name}

変数名の外側の中括弧はオプションです。追加するかどうかは自由ですが、追加するだけです。中括弧 これは、次の状況のようにインタープリタが変数の境界を識別するのに役立ちます:

for skill in Ada Coffe Action Java; do
    echo "I am good at ${skill}Script"
done

スキル変数に中括弧を追加せずに echo "I am good at $skillScript" と記述した場合、インタープリタは$skillScript を変数 (値が空) として扱うと、コードの実行結果は期待したものと異なります。

すべての変数に中括弧を追加することをお勧めします。これは、プログラミングの良い習慣です。

定義された変数は、次のように再定義できます。

your_name="tom"
echo $your_name
your_name="alibaba"
echo $your_name

このように記述することは合法ですが、2 回目に値を割り当てる場合は $your_name="alibaba" と記述することはできないことに注意してください。ドル記号は使用する場合にのみ追加してください。変数 ($)。

読み取り専用変数

変数を読み取り専用変数として定義するには、readonly コマンドを使用します。読み取り専用変数の値は変更できません。

次の例では、読み取り専用変数を変更しようとしていますが、結果はエラーです。

#!/bin/bash
myUrl="http://www.w3cschool.cc"
readonly myUrl
myUrl="http://www.php.cn"

スクリプトを実行すると、結果は次のようになります:

/bin/sh: NAME: This variable is read only.

変数を削除する

変数を削除するには、unset コマンドを使用します。構文:

unset variable_name

変数は、削除されると再度使用できなくなります。 unset コマンドは読み取り専用変数を削除できません。

#!/bin/sh
myUrl="http://www.php.cn"
unset myUrl
echo $myUrl

上記の例を実行しても出力はありません。

変数の種類

シェルを実行すると、次の 3 つの変数が同時に存在します:

  • 1) ローカル変数 ローカル変数はスクリプトまたはコマンドで定義され、現在のシェル インスタンスでのみ有効です。他のシェルではローカル変数にアクセスできません。

  • 2) 環境変数シェルによって起動されたプログラムを含むすべてのプログラムは、環境変数にアクセスできます。一部のプログラムでは、正常に動作するために環境変数が必要です。シェル スクリプトでは、必要に応じて環境変数を定義することもできます。

  • 3) シェル変数シェル変数は、シェルプログラムによって設定される特別な変数です。シェル変数の一部は環境変数であり、一部はローカル変数です。これらの変数はシェルの通常の動作を保証します


シェル文字列

文字列は、シェル プログラミングで最も一般的に使用され、便利なデータ型です (数値と文字列を除いて、一重引用符または二重引用符を使用できる文字列は他にありません)。マークを付けるか、引用符を付けません。一重引用符と二重引用符の違いは、PHP と同様です。

一重引用符

str='this is a string'

一重引用符文字列の制限:

  • 一重引用符内の文字はそのまま出力され、一重引用符文字列内の変数は無効です。 一重引用符は、一重引用符で囲まれた文字列内に使用できません (一重引用符にエスケープ文字を使用した後でも)。

  • 二重引用符

    your_name='qinjx'
    str="Hello, I know your are \"$your_name\"! \n"
  • 二重引用符の利点:

変数は二重引用符で囲むことができます

  • エスケープ文字は二重引用符で囲むことができます

  • 文字列を結合する

    your_name="qinjx"
    greeting="hello, "$your_name" !"
    greeting_1="hello, ${your_name} !"
    echo $greeting $greeting_1
  • 文字列の長さを取得する
string="abcd"
echo ${#string} #输出 4

部分文字列を抽出する

次の例では、文字列の

2

文字から始まる

4

文字をインターセプトします:

string="php is a great site"
echo ${string:1:4} # 输出 unoo
部分文字列の検索文字 "

i

または

s

" の位置を検索します:

string="php is a great company"
echo `expr index "$string" is`  # 输出 8
注: 上記のスクリプトの "`" はバックティックであり、一重引用符 "'" ではありません。読んでください、間違っています。

シェル配列

bash は 1 次元配列をサポートし (多次元配列はサポートしません)、配列のサイズを制限しません。

C言語と同様に、配列要素の添字には0から番号が付けられます。配列内の要素を取得するには、添字を使用します。添字には整数または算術式を使用でき、その値は 0 以上である必要があります。

配列を定義する

シェルでは、配列を表すために括弧が使用され、配列要素は「スペース」記号で区切られます。配列を定義する一般的な形式は次のとおりです:

数组名=(值1 值2 ... 值n)

例:

array_name=(value0 value1 value2 value3)

または

array_name=(
value0
value1
value2
value3
)

配列の各コンポーネントを個別に定義することもできます:

array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

は連続した添字を使用する必要はなく、添字の範囲は無制限。

配列を読み取る

配列要素の値を読み取るための一般的な形式は次のとおりです:

${数组名[下标]}

例:

valuen=${array_name[n]}

@ 記号を使用して配列内のすべての要素を取得します。例:

echo ${array_name[@]}

の長さを取得する配列

配列の長さを取得します。この方法は、文字列の長さを取得する方法と同じです。例:

# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}

Shell Comments

"#" で始まる行はコメントであり、インタプリタによって無視されます。 。

sh には複数行のコメントはありません。各行に # 記号を追加することしかできません。次のようにすることしかできません:

#--------------------------------------------
# 这是一个注释
# author:php中文网
# site:www.php.cn
# slogan: php中文网
#--------------------------------------------
##### 用户配置区 开始 #####
#
#
# 这里可以添加脚本描述信息
# 
#
##### 用户配置区 结束  #####

開発プロセス中に、一時的にコメントし、しばらくしてからコメントを解除する必要があるコードの大部分に遭遇した場合はどうすればよいでしょうか?

各行に # 記号を追加するのは面倒です。コメントするコードを中括弧で囲んで関数として定義することもできます。この関数を呼び出す場所がなければ、コードは実行されません。これにより、アノテーションが実行され、同じ効果が得られます。