English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
変数を定義する際には、変数名にドル記号($、PHP言語では変数が必要です)を付ける必要はありません。例えば:
your_name="w"3codebox.com"
注意してください。変数名と等号の間にはスペースを置かないことができます。これはおなじみのすべてのプログラミング言語とは異なります。また、変数名の命名は以下の規則に従う必要があります:
命名は英文字母、数字、下線のみを使用し、最初の文字は数字で始められません。
中間にはスペースは置かないことができますが、下線(_)を使用できます。
記号を使用することはできません。
bash内のキーワードは使用できません(helpコマンドで保留中のキーワードを確認できます)。
有効なShell変数名の例は以下の通りです:
w3codebox LD_LIBRARY_PATH _var var2
無効な変数名です:
?var=123 user*name=w3codebox
明示的に直接代入する以外に、以下の文を使用して変数に値を代入できます:
for file in `ls /etc` または for file in $(ls /etc)
以下の文は、 /etc下のディレクトリのファイル名をループで取得します。
既に定義された変数を使用する場合、変数名の前にドル記号を付けるだけで良いです。例えば:
your_name="qinjx" echo $your_name echo ${your_name}
変数名の外側の括弧は任意です。括弧を付けるかどうかは自由ですが、括弧を付けることで解釈器が変数の境界を識別する助けになります。例えば以下のようになります:
for skill in Ada Coffee Action Java; do echo "I am good at ${skill}Script" done
skill変数に括弧を付けない場合、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="https://www.google.com" readonly myUrl myUrl="https://ja.oldtoolbag.com"
スクリプトを実行すると、以下の結果が得られます:
/bin/sh: NAME: This variable is read only.
unsetコマンドを使用して変数を削除できます。構文:
unset variable_name
変数が削除された後は再び使用できません。unsetコマンドは読み取り専用の変数を削除できません。
例
#!/bin/sh myUrl="https://ja.oldtoolbag.com" unset myUrl echo $myUrl
以上の例を実行すると、何も出力されません。
shellを実行するとき、3つの種類の変数が同時に存在します:
1) ローカル変数ローカル変数はスクリプトやコマンドで定義され、現在のshellセッション内でのみ有効で、shellが起動した他のプログラムではアクセスできません。
2) 環境変数すべてのプログラム、shellが起動したプログラムも含め、環境変数にアクセスできます。一部のプログラムは環境変数を使用して正常動作を保証する必要があります。必要に応じて、shellスクリプトも環境変数を定義できます。
3) shell変数shell変数はshellプログラムによって設定された特別な変数です。shell変数には環境変数とローカル変数がありますが、これらの変数はshellの正常動作を保証します
文字列はshellプログラミングで最もよく使用され、最も役立つデータタイプです(数字や文字列以外に使用できるデータタイプはほとんどありません)、文字列はシングルクォート、ダブルクォート、またはクォートを使用できます。
str='this is a string'
シングルクォートの文字列の制限:
シングルクォート内の全ての文字はそのまま出力されます、シングルクォートの文字列内の変数は無効です;
シングルクォートの文字列では、単独のシングルクォートは使用できません(エスケープシーケンスを使用しても同じです)、しかし、対で使用して文字列の結合に使用できます。
your_name='w3codebox' str="Hello, I know you are \"$your_name\"! \n" echo -e $str
出力結果は:
Hello, I know you are "w3codebox"!
ダブルクォートの利点:
ダブルクォート内には変数が使用できます
ダブルクォート内にはエスケープシーケンスが使用できます
your_name="w"3codebox" # ダブルクォートで結合 greeting="hello, "$your_name" !" greeting_1="hello, ${your_name} !" echo $greeting $greeting_1 # シングルクォートで結合 greeting_2='hello, '$your_name' !' greeting_3='hello, ${your_name} !' echo $greeting_2 $greeting_3
出力結果は:
hello, w3codebox ! hello, w3codebox ! hello, w3codebox ! hello, ${your_name} !
string="abcd" echo ${#string} # 出力 4
以下の例では、文字列の第 2 文字から切り取ります 4 文字:
string="w3codebox is a great site" echo ${string:1:4} # 出力 unoo
注意:最初の文字のインデックスは 0。
文字の検索 i または o の位置(どの文字が先に出現するかによって計算されます):
string="w3codebox is a great site" echo `expr index "$string" io` # 出力 4
注意: 上記のスクリプトでは ` は反引号で、シングルクォート 'ではありませんので、間違えないでください。
bashは一つの次元の配列をサポートしています(複数の次元の配列をサポートしていません)そして配列のサイズに制限はありません。
C言語に似て、配列の要素のインデックスは0から始まる番号で指定されます。配列の要素を取得するにはインデックスを使用し、インデックスは整数または算術表現で、0以上の値を取る必要があります。
Shellでは、配列を括弧で表し、配列の要素は「スペース」シンボルで区切られます。配列を定義する一般的な形式は:
数组名=(值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]}
以 # で始まる行はコメントであり、インタプリタによって無視されます。
各行に # コメントを設定するには、以下のように行います:
#-------------------------------------------- # これはコメントです # author:基础教程网 # site:ja.oldtoolbag.com # slogan:基礎を学ぶことができれば、もっと遠くへ行ける! #-------------------------------------------- ##### ユーザー設定エリア 開始 ##### # # # ここにスクリプトの説明情報を追加できます # # ##### ユーザー設定エリア 終了 #####
開発中に、一時的にコメントアウトする必要がある大規模なコードがあれば、その後コメントを解除する方法はどうすればいいですか?
各行に # シンボルを追加するのは手間がかかるので、コメントを追加する必要があるコードを一对の括弧で囲んで、関数として定義することができます。この関数はどこにも呼び出されないため、コードは実行されず、コメントと同じ効果が得られます。
マルチラインコメントは以下の形式でも使用できます:
:<<EOF コメント内容... コメント内容... コメント内容... EOF
EOF は他のシンボルでも使用できます:
:<<' コメント内容... コメント内容... コメント内容... ' :<<! コメント内容... コメント内容... コメント内容... !