シェルスクリプト言語でのLinux「変数」の洞察-パート9


Linuxシェルスクリプトに関する一連の記事をすでに書いていますが、そのときは大歓迎で、今でも非常に関連性があります。シェルスクリプトに関する記事のコレクションへのリンクは次のとおりです。

  1. Learn Linux Shell Scripting

この記事では、変数、その実行、およびシェルスクリプトでの実装について説明します。

コマンドの出力は、標準出力またはファイルにリダイレクトでき、変数に保存することもできます。コマンドの出力が画面に収まらないほど大きい場合は、ファイルへの出力を変数に保存するオプションしかありません。出力を変数に保存する利点の1つは、検査速度が速いことです。変数はメモリに保存されるため、ファイルからの取得に比べて高速になる傾向があります。

変数はシェルスクリプトで使用される重要なコンポーネントであり、bashコマンド「Declare」を使用して宣言されます。 「level」という変数を宣言するには、以下のコマンドを実行する必要があります。

$ declare LEVEL

注:kornシェルの互換性のための組み込みステートメントである「typecast」を使用する必要があります。 「宣言」はより高度で、すべての機能が含まれているため、BASHを使用する場合に推奨されます。

  1. A variable name must justify, the use of variable in the script.
  2. Using the same variable name throughout the program is strongly advised.
  3. Variables name can be uppercase as well as lowercase but by convention shell commands are in lowercase and hence we should use variables name in uppercase, so as to remove any confusion. e.g., TOTAL_BILLED_AMOUNT, SELL_REPORT, ORDER_RECEIPT, etc.

変数には、等号(u003d)を使用して値を割り当てることができます。空の文字列を変数に割り当てるには、等号の後に値を指定しないでください。

$ LEVEL =

変数「LEVEL」に格納されている値をとして確認してください。

$ printf "%i" $LEVEL

ほとんどの「C」プログラマーが知っているコマンドであるprintfは、データを出力します。 %i –整数を表します。必要に応じて、文字の場合は%c、文字列の場合は%cに置き換えることができます。

:変数「LEVEL」の値の代替として機能する「$」に注意してください。

$ printf "%i" $LEVEL
0

変数に値を割り当てます。

$ LEVEL=0

変数に格納されているデータを確認してください。

$ printf "%i" $LEVEL
0

注:どちらの場合も、変数に値を割り当てなかった場合と、変数「LEVEL」に値「0」を割り当てた場合は、0が出力されます。ただし、どちらの場合も出力は同じです。ただし、シェルスクリプトは両方の変数宣言を異なる方法で処理します。

変数に新しい値を割り当てます。

$ LEVEL=121

変数に格納されているデータを確認してください。

$ printf "%i" $LEVEL
121

宣言はBASHコマンドであり、実行された場合にのみ変数を作成します。そのように作成された変数は、スクリプトが停止するか、変数が破棄されるまでメモリに残ります。

$ unset LEVEL

BASHには50を超える変数が事前定義されています。これらの変数のいくつかは、BASHに付随する特別な意味を持っています。たとえば、変数RANDOMは乱数を出力します。設定を解除してから再度定義すると、元の変数値は永久に失われます。したがって、システム定義の変数は使用しないことをお勧めします。

これはいくつかの有用なBASH変数のリストです。

  1. BASH—The full pathname of Bash.
  2. BASH_ENV—In a shell script, the name of the profile file executed before the script was started.
  3. BASH_VERSION—The version of Bash (for example, 2.04.0(1)-release).
  4. COLUMNS—The number of characters per line on your display (for example, 80).
  5. HOSTNAME—The name of the computer. Under some versions of Linux, this can be the machine name. On others, it can be a fully qualified domain name.
  6. HOSTTYPE—Type of computer.
  7. HOME—The name of your home directory.
  8. OSTYPE—The name of the operating system.
  9. PATH—Colon-separated list of search paths to find a command to execute.
  10. PPID—The process ID of the shell’s parent process.
  11. PROMPT_COMMAND—Command to execute before the setting of the PS1 primary prompt string.
  12. PWD—The current working directory (as set by the cd command).
  13. RANDOM—Returns a random number between 0 and 32767 each time it is referenced.
  14. SHELL—The preferred shell to use; for programs that start a shell for you.
  15. TERM—The terminal emulation type (for example, console).

単語分割のルール。

$ LEVEL=0
$ printf "%i" $LEVEL
0

AND

$ LEVEL=”0”
$ printf "%i" $LEVEL
0

どちらの場合も、出力は同じままです。では、見積もりを使用した場合の結果の違いは何ですか?

異なる変数データで同じことを確認しましょう。

$ LEVEL=0 ; 1 ; 2 ; 3 ; 4 ; 5
bash: 1: command not found 
bash: 2: command not found 
bash: 3: command not found 
bash: 4: command not found 
bash: 5: command not found
$ printf "%i" $LEVEL
0

言うまでもなく、出力は正しくありません。 BASHは「0」の後のスペースを終了として使用しているため、変数の値は「0」に設定されます。次に、以下のように変数の引用符を使用してみます。

$ LEVEL=”0 ; 1 ; 2 ; 3 ; 4 ; 5”
$ printf "%s" $LEVEL 
0;1;2;3;4;5

それでも結果は正しくありません。 BASHは変数値を取得し、それらの間のすべてのスペースを削除しました。したがって、printfは0、1、2、3、4、5を個別の値として解釈しませんでした。では、解決策は何ですか?

printf "%s" "$LEVEL" 
0 ; 1 ; 2 ; 3 ; 4 ; 5

うん!変数置換を引用符で囲むことが解決策です。引用符はシェル内の文字をグループ化し、意味のある方法で特殊文字を解釈します。

引用符は連続して使用できます。変数の置換を引用符で囲むことをお勧めします。さらに、テキスト全体を引用から分離するために使用できます。これが例です。

$ LEVEL=5 
$ FLAG_MESSAGE="I HAVE CLEARED LEVEL""$LEVEL"". I Deserve appreciation." 
$ printf “%s” “$FLAG_MESSAGE”
“I HAVE CLEARED LEVEL5. I Deserve appreciation.”

引用符で囲まれたテキストのチャンクをスペースで区切ると、上記と同じ問題が発生します。バッシュは空白を終了として扱います。変数置換の別の方法はです。

$ LEVEL=5

$ FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation." 

$ printf “%s” "$FLAG_MESSAGE" 
“I HAVE CLEARED LEVEL 5. I Deserve appreciation.”

一重引用符は、BASHによる特殊文字の印刷を制限します。

$ printf “%s” '$FLAG_MESSAGE'
“$FLAG_MESSAGE”

バックスラッシュは、1文字の単一引用符のように機能します。どのように印刷するか(“)を考えましたか?

$ printf "%c" "\""

%qをprintfとグループ化すると、単語の間隔を確保するために、すべての単語の後に円記号が表示されます。

$ LEVEL=5

$ FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation." 

$ printf “%q” "$FLAG_MESSAGE" 
“I\ HAVE\ CLEARED\ LEVEL\ 5.\ I\ Deserve\ appreciation.”

それは今のところすべてです。私たちは常に読者に役立つ記事を提供するよう努めています。上記の記事は広大であるため、例を含む残りのトピックは、「変数の属性」、「変数のエクスポート」などを含む次の記事で作成されます。

それまでは、しばらくお待ちください。Tecmint.comに接続してください。以下のコメントセクションで、貴重なフィードバックをお寄せください。