UNIX Shells by Example(Fourth Edition)読書ノート-2.Shellsプログラミング快速入門(一)のC ShellとTC Shell
6943 ワード
UNIX Shells by Example(Fourth Edition)読書ノート-2.Shellsプログラミング快速入門(一)のC ShellとTC Shell
2.1 Shellスクリプトをすばやく参照する:C shellとTC shellはC言語の文法Bourne shellに似ているAlgol言語BashとKorn shellsに基づいてBourneとC shellsを混合しているが、Bourne shellに起源がある.2.3 CとTCシェル構文
shbang行
「shbang」行は、スクリプトを解析するためにどのshellを使用するかを示す.まずは#,!,shellのパス:#!/bin/csh or #!/bin/tcsh
コメント
記号を使う.例:#This is a comment
ワイルドカード
*, ?, and[]ファイル名の拡張に使用します.履歴文字<,>,>,<&,and|標準IO用リダイレクトとパイプこれらの記号がshell解析器で解釈されるのを避けるために、shellでまたは"を使用する必要があります.例えば、rm*;ls?;cat file[1-3];!!echo"How are you?"echo Oh boy\!
しゅつりょくひょうじ
echo出力表示echo“Hello to you!”
ローカル変数
ローカル変数は現在のshellに存在します.set設定を使用します.例えばset variable_name = value set name = "Tom Jones"
グローバル変数
グローバル変数は環境変数と呼ばれます.例えばsetenv VARIABLE_NAME value setenv PRINTER Shakespeare
変数から値を抽出
変数から抽出するには、$を変数の前に使用します.例:echo$variable_name echo $name echo $PRINTER
ユーザー入力の読み込み
$<を使用して変数にローを読み込みます.たとえば、echo「What is your name?」set name = $<
パラメータ
コマンドラインからパラメータを入力できます.これらのパラメータ値は、位置パラメータとargv配列の2つの方法で受け入れられます.例:%scriptname arg 1 arg 2 arg 3...位置パラメータを使用するには、次の手順に従います.
echo $1 $2 $3
arg 1は$1,arg 2 to$2,etcとして指定する.
echo $*
すべてのパラメータ
argv配列を使用するには:
echo $argv[1] $argv[2] $argv[3]
echo $argv[*]
すべてのパラメータ
echo $#argv
パラメータ番号
はいれつ
配列は、スペースで区切られた列の文字です.()を使用して文字をすべて含めます.内蔵shiftネーミングで左側の字をリストから削除できます.Cとは異なり、indexの開始値は0ではなく1である.例:
set word_list = ( word1 word2 word3 )
リストからトムを削除
1番目を表示2番目を表示すべてを表示
コマンド置換
使用``例:
さんじゅつ
@を使用して計算結果の保存変数を表します.例えば@n=5+5 echo$n
オペレータ
同等性:
==
!=
Relational:
>
greater than
>=
greater than or equal to
<
less than
<=
less than or equal to
論理:
&&
and
||
or
!
nSot
じょうけんステートメント
if then. ifはendifで終わる必要があります.if/elseも使用できます.例:
The if construct is:
The if/else/else if construct is:
switch構造:
2種類の循環文:whileとforeachの循環制御ではbreakとcontinueを使用することができる.例えば、while(expression)block of statements end foreach variable(word list)block of statements end-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ファイルテスト
例:
–r
現在のユーザーはファイルを読むことができます
–w
現在のユーザーはファイルを書くことができます
–x
現在のユーザーがファイルを実行できる
–e
ファイルの存在
–o
現在のユーザー所有ファイル
–z
ファイル長0
–d
ファイルはディレクトリ
–f
ファイルは通常のファイルです
2.3.1 C/TC Shellスクリプト
Example 2.2.
2.1 Shellスクリプトをすばやく参照する:C shellとTC shellはC言語の文法Bourne shellに似ているAlgol言語BashとKorn shellsに基づいてBourneとC shellsを混合しているが、Bourne shellに起源がある.2.3 CとTCシェル構文
shbang行
「shbang」行は、スクリプトを解析するためにどのshellを使用するかを示す.まずは#,!,shellのパス:#!/bin/csh or #!/bin/tcsh
コメント
記号を使う.例:#This is a comment
ワイルドカード
*, ?, and[]ファイル名の拡張に使用します.履歴文字<,>,>,<&,and|標準IO用リダイレクトとパイプこれらの記号がshell解析器で解釈されるのを避けるために、shellでまたは"を使用する必要があります.例えば、rm*;ls?;cat file[1-3];!!echo"How are you?"echo Oh boy\!
しゅつりょくひょうじ
echo出力表示echo“Hello to you!”
ローカル変数
ローカル変数は現在のshellに存在します.set設定を使用します.例えばset variable_name = value set name = "Tom Jones"
グローバル変数
グローバル変数は環境変数と呼ばれます.例えばsetenv VARIABLE_NAME value setenv PRINTER Shakespeare
変数から値を抽出
変数から抽出するには、$を変数の前に使用します.例:echo$variable_name echo $name echo $PRINTER
ユーザー入力の読み込み
$<を使用して変数にローを読み込みます.たとえば、echo「What is your name?」set name = $<
パラメータ
コマンドラインからパラメータを入力できます.これらのパラメータ値は、位置パラメータとargv配列の2つの方法で受け入れられます.例:%scriptname arg 1 arg 2 arg 3...位置パラメータを使用するには、次の手順に従います.
echo $1 $2 $3
arg 1は$1,arg 2 to$2,etcとして指定する.
echo $*
すべてのパラメータ
argv配列を使用するには:
echo $argv[1] $argv[2] $argv[3]
echo $argv[*]
すべてのパラメータ
echo $#argv
パラメータ番号
はいれつ
配列は、スペースで区切られた列の文字です.()を使用して文字をすべて含めます.内蔵shiftネーミングで左側の字をリストから削除できます.Cとは異なり、indexの開始値は0ではなく1である.例:
set word_list = ( word1 word2 word3 )
set names = ( Tom Dick Harry Fred )
shift names
リストからトムを削除
echo $word_list[1]
echo $word_list[2]
echo $word_list or $word_list[*]
echo $names[1]
echo $names[2]
echo $names[3]
echo $names or echo $names[*]
1番目を表示2番目を表示すべてを表示
コマンド置換
使用``例:
set variable_name=`command` echo $variable_name
set now = `date`
echo $now
echo "Today is `date`"
さんじゅつ
@を使用して計算結果の保存変数を表します.例えば@n=5+5 echo$n
オペレータ
同等性:
==
!=
Relational:
>
greater than
>=
greater than or equal to
<
less than
<=
less than or equal to
論理:
&&
and
||
or
!
nSot
じょうけんステートメント
if then. ifはendifで終わる必要があります.if/elseも使用できます.例:
The if construct is:
if ( expression ) then
block of statements
endif
The if/else construct is: if ( expression ) then
block of statements
else
block of statements
endif
The if/else/else if construct is:
if ( expression ) then
block of statements
else if ( expression ) then
block of statements
else if ( expression ) then
block of statements
else
block of statements
endif
switch ( "$color" )
case blue:
echo $color is blue
breaksw
case green:
echo $color is green
breaksw
case red:
case orange:
echo $color is red or orange
breaksw
default:
echo "Not a valid color"
endsw
switch構造:
switch variable_name
case constant1:
statements
case constant2:
statements
case constant3:
statements
default:
statements
endsw
ループ2種類の循環文:whileとforeachの循環制御ではbreakとcontinueを使用することができる.例えば、while(expression)block of statements end foreach variable(word list)block of statements end-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ファイルテスト
例:
–r
現在のユーザーはファイルを読むことができます
–w
現在のユーザーはファイルを書くことができます
–x
現在のユーザーがファイルを実行できる
–e
ファイルの存在
–o
現在のユーザー所有ファイル
–z
ファイル長0
–d
ファイルはディレクトリ
–f
ファイルは通常のファイルです
2.3.1 C/TC Shellスクリプト
Example 2.2.
1 #!/bin/csh –f
2 # The Party Program––Invitations to friends from the "guest" file
3 set guestfile = ~/shell/guests
4 if ( ! –e "$guestfile" ) then
echo "$guestfile:t non–existent"
exit 1
5 endif
6 setenv PLACE "Sarotini's"
7 @ Time = `date +%H` + 1
8 set food = ( cheese crackers shrimp drinks "hot dogs" sandwiches )
9 foreach person ( `cat $guestfile` )
10 if ( $person =~ root ) continue
11 mail –v –s "Party" $person << FINIS # Start of here document
Hi $person!Please join me at $PLACE for a party!
Meet me at $Time o'clock. I'll bring the ice cream.
Would you please bring $food[1] and anything else you would like to eat?
Let me know if you can make it. Hope to see you soon.
Your pal,
ellie@`hostname` # or `uname -n`
12 FINIS
13 shift food
14 if ( $#food == 0 ) then
set food = ( cheese crackers shrimp drinks "hot dogs" sandwiches )
endif
15 end
echo "Bye..."
:
1. kernel, C shell . ”–f“ . .cshrc.
2.
3. guestfile guests
4. , guests , "guests nonexistent" , 。
5.endif
6.PLACE
7.Time 。@ 。
8.food 。
9.foreach 。 `cat $guestfile`.
10.
11.foreach
12.FINIS
13.shift person
14. food , 。
15.