1. ホーム

Linuxシェルスクリプト - Linux特殊記号の完全リスト

2022-02-25 09:42:07

Linuxの特殊記号の完全なリスト

シェルでよく使われる特殊記号の一覧は以下のとおりです。







# ; ;; .      , / '文字列'| !   $ ${} $?      $$ $* "string"* ** ? ^ $# $@ `command`{}. [] [[]] () (()) ||| && {xx,yy,zz,...}のようなものです。~ ~+ ~- & \<... \♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪~ = 

# Well番号(コメント)



これは、すでに前述した"first line"を除いて、ほぼ全フィールドに存在する記号である。



#! /bin/bash



また、ウェル記号は行頭やコマンド全体の後によく現れますが、これは記号の後に実行されないコメント文が続くことを示します。



# この行はコメントです。



echo "a = $a" # a = 0



この機能があるので、一時的に命令を実行したくないときは、その行の先頭に#をつければいいのです。これは、文章を書くときによく使われる。



#echo "a = $a" # a = 0



ディレクティブの中で使われたり、引用符や二重引用符で囲まれたり、バックスラッシュの後に続くと、上記のような特別な機能を持たない一般的なシンボルになります。











~ アカウントのホームディレクトリ



これは、ユーザーのホームディレクトリを表す一般的な記号です: cd ~; 記号の後に直接アカウント名を追加することもできます: cd ~user またはパスの一部として扱われます。~/bin



~+ この記号は、現在の作業ディレクトリを表し、組み込みコマンドのpwdと同じです。



# echo ~+/var/log



~- 最終作業ディレクトリ、このシンボルは最終作業ディレクトリを表します。



# echo ~-/etc/httpd/logs











コマンドセパレータ



シェルにおいて、quot;連続コマンドとして機能する記号は、quot;セミコロンである。例えば、次の例では、cd ~/backup ; mkdir startup ; cp ~/. * startup/.











連続するセミコロン (ターミネータ)



ターミネーターの役割を担う、ケース専用のオプション。



case "$fop" inhelp) echo "使用方法。コマンド -help -バージョン ファイル名";バージョン) echo "バージョン 0.1";esac











. カンマ(ドット、それは "ドット")です。



シェルでは、1つのドットがカレントディレクトリを、2つのドットが親ディレクトリを表すことが、ユーザーにとって明確であるべきです。



CDPATH=. :~:/home:/home/web:/var:/usr/local



一番上の行のCDPATHの設定において、等号の後のドットはカレントディレクトリを表します。



ファイル名がドットで始まる場合は、特殊なファイルであるため、lsコマンドの-aオプションで表示する必要があります。また,Regularexpressionでは,ドットはある文字にマッチすることを意味します.











'string'シングルクォート(一重引用符)



シングルクォートで囲まれた内容は、1つの文字列として扱われます。変数を表す引用符の中の $ 記号は何の効果もなく、すなわち一般的な記号として扱われ、変数の置換を防ぐことができます。



heyyou=homeecho '$heyyou' # $heyyou を取得します。











"string"ダブルクォート(二重引用符)



二重引用符で囲まれた内容は、1つの文字列として扱われます。ワイルドカード展開はできませんが、変数展開は可能です。シングルクォートとは扱いが異なります。



heyyou=homeecho "$heyyou" # 私たちは家に帰れる







コマンド`のバックティック



文字列の前にあるシングルクォートとダブルクォートは文字列を囲んでいますが、その文字列がコマンドカラムの場合はどうなるのでしょうか?答えは、「実行されない」です。この場合に対応するためには、シングルクォートを反転させてやる必要があるのです。



fdv=`date +%F`echo "今日 $fdv"



引用符で囲まれた日付+%Fは指示文として扱われ、実行結果が変数fdvに取り込まれます。











, カンマ(句読点のコンマ)。



この記号は、算数でよく使われるセパレータ(quot;separator")です。以下はその例です。



#! /bin/bashlet "t1 = ((a = 5 + 3, b = 7 - 1, c = 15 / 3))"echo "t1= $t1, a = $a, b = $b"











/ スラッシュ(フォワードスラッシュ)



パス表現では、ディレクトリを表す。



cd /etc/rc.dcd . /. .cd /



多くの場合、単一の / はルートディレクトリを表し、四角形では分割記号を表します。



num1 = ((a = 10 / 2, b = 25 / 5))".LET ".LET "num1 = ((a = 10 / 2, b = 25 / 5))"











\ ♪逆スラッシュ



対話型モードでのエスケープ文字は、指令の前に置くとエイリアスを解除する効果があり、特殊記号の前に置くとその特殊記号の効果がなくなり、指令の一番最後に置くと次の行につながることを示すという、いくつかの役割を果たします。



# type rmrm is aliased to `rm -i'# \ rmrm . /*.log



上記の例では、rmコマンドの前にエスケープ文字を追加していますが、これはエイリアシングを一時的に無効にして、rmコマンドを元に戻す役割を果たします。



# bkdir=/home# echo "ディレクトリをバックアップ, \$bkdir = $bkdir"Backup dir,$bkdir = /home



上記の例のecho内のescapeは、$変数を取り除いているので、$bkdirを出力し、2番目の$bkdirは、変数/homeの内容を出力します。











| パイプライン



パイプラインは、UNIXシステムにとって基本的かつ重要な概念である。前のコマンドの標準出力は、次のコマンドの標準入力にリンクされます。



誰|wc -l



このアイデアをうまく使うと、スクリプトを効率化するのにかなり役に立ちます。











! 感嘆符(否定または反転)



通常、条件検出などでは、! = で "等しくない" を表すなど、逆引きロジックの役割を表します。



if [ "$? " != 0 ]thenecho "Executes error"exit 1fi



正規表現において、quot;counter-logic"として機能する。



ls a[!0-9]



上の例は、a0, a1 ... a9 を除くすべてのファイルを表示したもので、これらはその他のファイルです。











: コロン



bashでは、組み込みディレクティブである"Do nothing"が、ステータス値0を返します。



:



echo $? # 応答は0



: > f.$$



上の行は、cat /dev/null >f.$$ と同じです。より短いだけでなく、はるかに効率的です。



時には、次のような使い方もあります。



: ${HOSTNAME?} USER? ${MAIL?}



この行の目的は、これらの環境変数が設定されているかどうかをチェックし、設定されていない場合は、標準エラーでエラーメッセージを表示することです。この種のチェックは基本的に test や if のようなもので処理できますが、上記の例のようにきれいで効率的ではありません。



上記に加えて、もう一箇所、コロンを使用しなければならない場所があります。



PATH=$PATH:$HOME/fbin:$HOME/fperl:/usr/local/mozilla



.bash_profileや、ユーザー自身のHOMEディレクトリにある機能的に類似したファイルでは、"path"に関する設定をコロンで区切っています。











? クエスチョンマーク(ワイルドカード)



ファイル名展開の役割は、任意の文字にマッチすることであり、ヌル文字はマッチしない。



# ls a?a1



彼女の機能をうまく使って、より正確なファイル名のマッチングを行いましょう。











* アスタリスク(ワイルドカード)



かなり一般的な記号。ファイル名展開では、ヌル文字を含むあらゆる文字を表すために使用されます。



# ls a*a a1 access_log



算数では、quot;multi"を意味する。



fmult=2*3"とする。



組み込み命令 let の他に、算術に関する命令 expr があり、アスタリスクは "乗算" の役割も果たしています。ただし、このディレクティブの前にはエスケープ文字が必要なので、使用する際には注意が必要です。











** サブディビジョン操作



2つのアスタリスクは、算数でいうところのquot;subsquares"を表しています。



let "sus=2**3"echo "sus = $sus" # sus = 8











ドル記号



変数置換 (Variable Substitution)は記号を表します。



vrs=123echo "vrs = $vrs" # vrs = 123



また、正規表現では、"line" 行末として定義されています。これは grep, sed, awk, vim(vi) でよく使われます。











変数 ${} の正規表現



bashは${}の使い方をいろいろと定義しています。以下は、オンラインの説明から引用した表形式のリストです。



   ${parameter:-word} ${parameter:=word} ${parameter:?word} ${parameter:+word} ${parameter:offset} ${parameter:offset:length} ${!prefix*} ${! ${ #parameter} ${parameter#word} ${parameter##word} ${parameter%word} ${parameter%%word} ${parameter/pattern/string} ${parameter//pattern/string}.











$*



$*
参照されるスクリプトの実行は変数を参照し、パラメータの参照アルゴリズムは一般的な命令と同じで、命令そのものが0、その後に1、といった具合になる。参照変数は以下のように表現される。



$0, $1, $2, $3, $4, $5, $6, $7, $8, $9, ${10}, ${11} .....



1桁の場合は数字を直接使うことができますが、2桁以上の場合は{}記号で囲む必要があります。



は、参照されるすべての変数のシンボルです。使用する場合は、適宜二重引用符で囲む必要があります。



echo "$*"



もう一つ、$*と同じ効果を持つ記号がありますが、実用性や扱いが少し異なります。











$@



記号と$*記号は同じ効果を持ちますが、1つの点で異なります。



シンボル$*は、参照されているすべての変数を全体として扱います。しかし、シンボル$@は、参照される各変数のゾーンという概念を保持します。







$#



これも参照変数に関連する記号で、彼女の目的は参照変数の総数が何であるかを伝えることである。



echo "$#"











$? ステータス値 (ステータス変数)



一般に、UNIX(linux)システム上のプロセスは、システムコールexit()を実行することで終了する。この戻り値がステータス値である。これは、子プロセスの実行状況を確認するために、親プロセスに戻されます。



戻り値は、通常のコマンドプログラムの実行に成功した場合は 0、失敗した場合は 1 である。



tar cvfz dfbackup.tar.gz /home/user > /dev/nullecho"$? "$$?



プロセスIDは一意であるため、PIDが同時に重複することはありません。また、このスクリプトでは、必要な情報を保存するために一時ファイルを生成する必要がある場合があります。また、このスクリプトは同時に複数のユーザーによって使用されることがあります。この場合、固定されたファイル名では書き込みの信頼性がない。この必要性を満たすには、動的なファイル名を生成するしかない。このニーズには、$$という記号が合うかもしれない。これは、現在のシェルのPIDを表している。



echo "$HOSTNAME, $USER, $MAIL" > ftmp.$$.



ファイル名の一部として使用することで、同じファイル名を同時に上書きすることを避けることができます。



ps: 基本的に、実行されたPIDはシステムが回収し、必要に応じて再度割り振ります。そのため、動的なファイル名でスクリプトを記述しても、実行後にクリアされないと、別の問題が発生する可能性があります。







( )コマンドグループ



連続したコマンドの文字列を括弧で囲むことを、シェルではコマンド・グループと呼びます。次の例(cd ~ ; vcgh=`pwd`; echo $vcgh)のように、コマンドグループは、シェルがサブシェルを生成してグループを実行するという性質を持っています。そのため、その中で定義された変数は、命令グループ自体にのみ適用されます。例を見てみましょう。



# cat ftmp-01#! /bin/basha=fsh(a=incg ; echo -e "\n $a")echo $a#. /ftmp-01incgfsh



上記のコマンド群に加えて、括弧は配列変数の定義にも使用されます。また、算術演算など、使用時にエスケープ文字が必要とされる文脈でも使用されます。











(( ))



この記号群は算術演算のlet指令と似ており、bashに組み込まれている。そのため、letディレクティブを使うよりもはるかに効率的です。











{ } 波括弧 (コードブロック)



スクリプトには、コードのブロックがあり、段落が "セミコロン" で終わっていたり、変数が中括弧で設定されていることがあります。



# cat ftmp-02#! /bin/basha=fsh{a=inbc ; echo -e "\n $a"}echo $a#. /ftmp-02inbcinbc



この使い方は、上記のコマンドグループと非常によく似ていますが、1つだけ違うのは、現在のシェルで実行され、サブシェルが生成されないことです。



曲線ブレースは、"function"の関数内でも使用されます。大雑把に言うと、中括弧を使うだけで、名前を指定しない関数と同じような働きをします。したがって、この方法でスクリプトを書くと良いことがあります。特に、出力の入力をリダイレクトすることで、スクリプトの複雑さを合理化することができる。







さらに、中括弧には、次のような使い方もあります。



{xx,yy,zz,...} となります。



この中括弧の組み合わせは、文字列の組み合わせによく使われます。



mkdir {userA,userB,userC}-{home,bin,data}とする。



userA-home, userA-bin, userA-data, userB-home, userB-bin,userB-data, userC-home, userC-bin, userC-data というディレクトリが得られます。このシンボル群は、かなり広範囲に適用可能である。うまく利用すれば、合理化、効率化が図れる。次のような例です。



chown root /usr/{ucb/{ex,edit},lib/{ex?...? *,how_ex}}



この使い方のサポートがなかったら、何行も書いて何度も繰り返さなければならないでしょう











[ ]括弧



フロー制御でよく見られる、判定式を囲む役割。 if [ "$? " != 0 ]thenecho "Executes error"exit1fi



この記号は正規表現における "range" や "set" のような働きをします。



rm -r 200[1234]です。



上記の例では、2001、2002、2003、2004などのディレクトリを削除していることを表しています。











[[ ]]]



この記号群は、基本的に前の[]記号と同じことをしますが、彼女はその中で||や&論理などの記号を直接使用することを許可しています。



#! /bin/bashread akif [[ $ak > 5 || $ak< 9 ]]thenecho $akfi











| 論理記号



これは時々見られるもので、orの論理記号を表しています。











&& 論理記号



これもよく見かけるようになる、and論理記号を表す。











バックオフィス業務



完全なコマンド列の最後に置かれた1つの&記号は、コマンド列をバックグラウンドに置いて作業することを意味します。



tar cvfz data.tar.gz data > /dev/null&







\♪♪「... \♪♪~



この記号群は、正規表現において「境界」を意味するものとして定義されている。例えば、the という単語を見つけたい場合、次のようにします。



grep the FileA



Thereのような1つの単語もマッチとして扱われることがわかります。なぜなら、theはたまたまthereの一部だからです。これを避けたい場合は、"boundary" という記号を追加する必要があります。



grep '\' FileA











+ プラス(プラス)



演算子式で、彼女は"plus"を表すのに使われる。



expr 1 + 2 + 3



また、正規表現では、直前のリテラルのうち"many"を意味するために使用されます。



# grep '10+9' fileB109100910000910000931010009# この記号を使用する場合は、その前にエスケープ文字を付けなければならない。











- マイナス記号(ダッシュ)



算数では、引き算を表すのに使われる。



expr 10 - 2



また、システムコマンドのオプション記号でもある。



ls -expr 10 - 2



GNU指令では、追加すべきファイル名を指定せずに-記号のみを使用した場合、"標準入力"を表します。これは、GNUコマンドの一般的なオプションです。たとえば、次のような例です。



tar xpvf -



ここでの-マークは、標準入力から情報を読み込むことの両方を表します。



しかし、cdコマンドはより具体的です



cd -



これは、作業ディレクトリを "最後の"作業ディレクトリに変更することを表します。











% 分割 (Modulo)



算数で、割り算を表すのに使われる。



expr 10 % 2



また、変数に対する正規表現では、次のようなものも使用されます。



パラメータ%ワード}${パラメータ%ワード}とする。



1つの%は最も短い単語の一致を、2つは最も長い単語の一致を示す。











= Equals (イコールズ)



変数を設定する際によく目にする記号。



vara=123echo " vara = $vara"



あるいは、PATH設定のように、算術式や判断式などにまで適用して使用する。











== Equals (イコールズ)



条件付き判定でよく見られるもので、"equals"の略。



if [ $vara == $varb ]。



... 省略







! = not equal to



条件付き判定でよく見られるもので、"not equal to"を意味する。



if [ $vara ! = $varb ]。



... 省略











^



この記号は正規表現における行頭の位置を表し、[]内では"not"(感嘆符)と同様に"!"を表します。











出力/入力のリダイレクト



> >> < :> &> 2&> 2<> &> &&2   







ファイル記述子、数字(通常0-9)はファイルを表すために使用されます。



一般的に使用されるファイルディスクリプタは以下の通りです。



ファイル記述子 名称 共通の略語 デフォルト値



     0 標準入力 stdin キーボード



     1 標準出力 stdout スクリーン



     2 標準エラー出力 stderr 画面



単に<や>を使う場合に、0<や1>と同等のものを使っているのです(詳細は後述します)。



* cmd > ファイル



cmd コマンドの出力をファイル file にリダイレクトします。file がすでに存在する場合は、元のファイルをクリアします。元のファイルを上書きしないようにするには、bash の noclobber オプションを使用します。



* cmd >> ファイル



cmd コマンドの出力をファイル file にリダイレクトするか、file がすでに存在する場合は、元のファイルの後に情報を追加します。



* cmd < ファイル



cmdコマンドをファイルから読み込むようにする



* cmd << テキスト



コマンドラインからテキストと同じ行の終わりまで入力を読み込む。入力が引用符で囲まれていない限り、このモードでは入力に対してシェル変数の置換が行われる。<<- を使用すると、次の入力行の先頭のタブは無視され、次の例に見られるように、終了行はタブの束とテキストと同じ内容の行にすることができます。



* cmd <<< word



ワード(ファイルワードではない)とそれに続く改行を入力としてcmdに指定します。



* cmd <> ファイル



filefile を read-write モードの入力にリダイレクトする、filefile は破損しない。アプリケーションがこの機能を利用する場合にのみ意味があります。



* cmd >|ファイル



> と同じ機能ですが、noclobber が設定されていても、ファイル file は複製されます。この機能を実現するために、まだ csh の >! でしか使われていない ! の代わりに | を使っていることに注意してください。



: > ファイル名       ファイル "filename" を長さ 0 に切り詰める。 # もしファイルが存在しなければ、長さ 0 のファイルを作成する(「touch」と同じ効果)。



cmd >&n ファイルディスクリプタに出力を送信する n



cmd m>&n ファイルディスクリプタmへの出力をファイルディスクリプタnにリダイレクトする。



cmd >&- 標準出力を閉じる



cmd <&n ファイルディスクリプタからの入力 n



cmd m<&n mを各nのファイル記述から



cmd <&- 標準入力を閉じる



cmd <&n-. 入力ファイル記述子をコピーするのではなく、n個移動させる。



cmd >&n-」。 出力ファイルディスクリプタをコピーするのではなく、n個移動させる。



注意:>&は実際にはファイル記述子をコピーするので、cmd > file 2>&1 と cmd 2>&1 >file は同じものではありません。