shell学習一
5202 ワード
今日は模写本にShellと書いて、以下のようにまとめました.
1、変数を定義する場合、等号の両側は空白にできません.すなわちname=「$1」という標準的なJavaの書き方は誤りであり、書かなければならない
name=「$1」です.そうしないと、nameは変数ではなくコマンドと見なされます.
2、渡されたパラメータは「$i」すなわち「$1」、「$2」を使用してi番目の変数を抽出し、「$0」個はコマンド自体であり、「$#」はパラメータを表す
を選択します.
3、ifの判断文[]では、判断条件は「[」または「]」と空白で区切らなければならないif["$#"!=1]であり、[$#"!=1]ではなく
4、命令を実行する場合、命令は「'」ではなく「`」に書かれるので、特に注意してください.
キーボードの左上の位置.
5、shellの実行過程を追跡するコマンド:sh-x hello.sh.このコマンドを実行すると、実行結果は変数をすべて実行値に置き換えます.
6、変数の読み込みと使用:
read -p "Please input your first name: "firstname
read -p "Please input your last name: "lastname
echo -e "Your full name is: $firstname $lastname"
7、数値演算:
read -p "first number: "firstnu
read -p "second number: "secnu
total=$(($firstnu*$secnu))
もう1つの方法:
declare -i total=$firstnu*$secnu
カッコと整数を定義する数値演算機能
8、
test命令によるテスト機能
test -e/dmtsai && echo "exist"|| echo "Not exist"
テストフラグ
代表的意義.
1.test-e filenameなどのファイル名の「タイプ」検出(存在するかどうか)について
-e
この「ファイル名」は存在しますか?(共通)
-f
この「ファイル名」はファイル(file)ですか?(共通)
-d
この「ファイル名」はディレクトリ(directory)ですか?(共通)
-b
この「ファイル名」はblockデバイスですか?
-c
この「アーカイブ名」はcharacterデバイスですか?
-S
この「ファイル名」はSocketファイルですか?
-p
この「ファイル名」はFIFO(pipe)ファイルですか?
-L
この「シフト名」は連結シフトですか?
2.ファイルの権限検出、例えばtest-r filename
-r
アーカイブ名に「読み取り可能」のプロパティがあるかどうかを検出します.
-w
ファイル名に「書き込み可能」のプロパティがあるかどうかを検出します.
-x
アーカイブ名に「実行可能」のプロパティがあるかどうかを検出します.
-u
このファイル名に「SUID」の属性があるかどうかを検出します.
-g
このファイル名に「SGID」の属性があるかどうかを検出します.
-k
このファイル名に「Sticky bit」の属性があるかどうかを検出します.
-s
このファイル名が「空白以外のファイル」であるかどうかを検出します.
3.test file 1-nt file 2のような2つのファイル間の比較
-nt
(newer than)file 1がfile 2より新しいか否かを判断する
-ot
(older than)file 1がfile 2より古いか否かを判断する
-ef
file 2とfile 2が同じファイルであるか否かを判断するにはhard linkを判断する判定に用いることができる.主な意味は、2つのファイルが同じinodeを指しているかどうかを判定することです.
4.2つの整数間の判定、例えばtest n 1-eq n 2について
-eq
2つの値が等しい(equal)
-ne
2つの値が等しくない(not equal)
-gt
n 1がn 2より大きい(greater than)
-lt
n 1がn 2未満(less than)
-ge
n 1がn 2以上である(greater than or equal)
-le
n 1がn 2以下(less than or equal)
5.文字列を判定する資料
test -z string
文字列が0かどうかを判定します.stringが空の文字列の場合はtrue
test -n string
文字列が0でないかどうかを判定します.stringが空の文字列の場合falseです.注:-nも省略可能
test str1 = str2
str 1がstr 2に等しいか否かを判定し、等しいとtrueを返信する
test str1 != str2
str 1がstr 2に等しくないか否かを判定し、等しい場合falseに返信する
6.多重条件判定、例えばtest-r filename-a-x filename
-a
(and)両状況が同時に成立!例えばtest-r file-a-x fileの場合、fileがrとxの両方の権限を持っている場合、trueが返信されます.
-o
(or)両状況いずれも成立!例えばtest-r file-o-x fileの場合、fileにrまたはx権限がある場合、trueを返信できます.
!
testなどの反転状態x file、fileがxを持たない場合、trueを返す
shellで使用する例:
echo -e "The program will show you that filename is exist which input by you."
read -p "Input a filename : "filename
test -z $filename && echo "You MUST input a filename."&& exit 0
# 2. ファイルが存在するかどうかを判断します.
test ! -e $filename && echo "The filename $filename DO NOT exist"&& exit 0
# 3. アーカイブタイプとプロパティの判断を開始
test -f $filename && filetype="regulare file"
test -d $filename && filetype="directory"
test -r $filename && perm="readable"
test -w $filename && perm="$perm writable"
test -x $filename && perm="$perm executable"
# 4. 情報の出力を開始します!
echo "The filename: $filename is a $filetype"
echo "And the permission are : $perm"
9、
判断記号[]read-p「Please input(Y/N):」yn[「$yn」=「Y」-o「$yn」=「y」&&echo「OK,continue」&&exit 0[「$yn」=「N」-o「$yn」=「n」&&echo「Oh,interrupt!」exit 0 echo“I don't know what is your choise”&&exit 0[]の変数は“”で囲むとエラーになりやすいので注意
たとえば、name="Vbird Tsai"を設定した場合、次のように判定します.
どうしてですか.$nameは二重引用符で剃らないと、上記の判定式が次のようになります.
[ VBird Tsai == "VBird"]
私たちが望んでいるのではなく
[ "VBird Tsai"== "VBird"]
9、shellの具体的なコードは以下の通りです.
#!/bin/sh
#
# This is a simple shell program
#
# the first line starts with #!,it means to use/bin/sh to explain
# this scirpt
# other lines starting with # means comments,bash ignores these
#
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
name="$1"
ip="163.26.197.1"
exacttime=`date +%Y%m%d`
if [ $# != 1 ]; then
echo "Usage: $0 [username]"
exit
fi
echo "today is $exacttime, your name is $name, from $ip"
echo
echo "Bye-Bye"
1、変数を定義する場合、等号の両側は空白にできません.すなわちname=「$1」という標準的なJavaの書き方は誤りであり、書かなければならない
name=「$1」です.そうしないと、nameは変数ではなくコマンドと見なされます.
2、渡されたパラメータは「$i」すなわち「$1」、「$2」を使用してi番目の変数を抽出し、「$0」個はコマンド自体であり、「$#」はパラメータを表す
を選択します.
3、ifの判断文[]では、判断条件は「[」または「]」と空白で区切らなければならないif["$#"!=1]であり、[$#"!=1]ではなく
4、命令を実行する場合、命令は「'」ではなく「`」に書かれるので、特に注意してください.
キーボードの左上の位置.
5、shellの実行過程を追跡するコマンド:sh-x hello.sh.このコマンドを実行すると、実行結果は変数をすべて実行値に置き換えます.
6、変数の読み込みと使用:
read -p "Please input your first name: "firstname
read -p "Please input your last name: "lastname
echo -e "Your full name is: $firstname $lastname"
7、数値演算:
read -p "first number: "firstnu
read -p "second number: "secnu
total=$(($firstnu*$secnu))
もう1つの方法:
declare -i total=$firstnu*$secnu
カッコと整数を定義する数値演算機能
8、
test命令によるテスト機能
test -e/dmtsai && echo "exist"|| echo "Not exist"
テストフラグ
代表的意義.
1.test-e filenameなどのファイル名の「タイプ」検出(存在するかどうか)について
-e
この「ファイル名」は存在しますか?(共通)
-f
この「ファイル名」はファイル(file)ですか?(共通)
-d
この「ファイル名」はディレクトリ(directory)ですか?(共通)
-b
この「ファイル名」はblockデバイスですか?
-c
この「アーカイブ名」はcharacterデバイスですか?
-S
この「ファイル名」はSocketファイルですか?
-p
この「ファイル名」はFIFO(pipe)ファイルですか?
-L
この「シフト名」は連結シフトですか?
2.ファイルの権限検出、例えばtest-r filename
-r
アーカイブ名に「読み取り可能」のプロパティがあるかどうかを検出します.
-w
ファイル名に「書き込み可能」のプロパティがあるかどうかを検出します.
-x
アーカイブ名に「実行可能」のプロパティがあるかどうかを検出します.
-u
このファイル名に「SUID」の属性があるかどうかを検出します.
-g
このファイル名に「SGID」の属性があるかどうかを検出します.
-k
このファイル名に「Sticky bit」の属性があるかどうかを検出します.
-s
このファイル名が「空白以外のファイル」であるかどうかを検出します.
3.test file 1-nt file 2のような2つのファイル間の比較
-nt
(newer than)file 1がfile 2より新しいか否かを判断する
-ot
(older than)file 1がfile 2より古いか否かを判断する
-ef
file 2とfile 2が同じファイルであるか否かを判断するにはhard linkを判断する判定に用いることができる.主な意味は、2つのファイルが同じinodeを指しているかどうかを判定することです.
4.2つの整数間の判定、例えばtest n 1-eq n 2について
-eq
2つの値が等しい(equal)
-ne
2つの値が等しくない(not equal)
-gt
n 1がn 2より大きい(greater than)
-lt
n 1がn 2未満(less than)
-ge
n 1がn 2以上である(greater than or equal)
-le
n 1がn 2以下(less than or equal)
5.文字列を判定する資料
test -z string
文字列が0かどうかを判定します.stringが空の文字列の場合はtrue
test -n string
文字列が0でないかどうかを判定します.stringが空の文字列の場合falseです.注:-nも省略可能
test str1 = str2
str 1がstr 2に等しいか否かを判定し、等しいとtrueを返信する
test str1 != str2
str 1がstr 2に等しくないか否かを判定し、等しい場合falseに返信する
6.多重条件判定、例えばtest-r filename-a-x filename
-a
(and)両状況が同時に成立!例えばtest-r file-a-x fileの場合、fileがrとxの両方の権限を持っている場合、trueが返信されます.
-o
(or)両状況いずれも成立!例えばtest-r file-o-x fileの場合、fileにrまたはx権限がある場合、trueを返信できます.
!
testなどの反転状態x file、fileがxを持たない場合、trueを返す
shellで使用する例:
echo -e "The program will show you that filename is exist which input by you."
read -p "Input a filename : "filename
test -z $filename && echo "You MUST input a filename."&& exit 0
# 2. ファイルが存在するかどうかを判断します.
test ! -e $filename && echo "The filename $filename DO NOT exist"&& exit 0
# 3. アーカイブタイプとプロパティの判断を開始
test -f $filename && filetype="regulare file"
test -d $filename && filetype="directory"
test -r $filename && perm="readable"
test -w $filename && perm="$perm writable"
test -x $filename && perm="$perm executable"
# 4. 情報の出力を開始します!
echo "The filename: $filename is a $filetype"
echo "And the permission are : $perm"
9、
判断記号[]read-p「Please input(Y/N):」yn[「$yn」=「Y」-o「$yn」=「y」&&echo「OK,continue」&&exit 0[「$yn」=「N」-o「$yn」=「n」&&echo「Oh,interrupt!」exit 0 echo“I don't know what is your choise”&&exit 0[]の変数は“”で囲むとエラーになりやすいので注意
たとえば、name="Vbird Tsai"を設定した場合、次のように判定します.
[root@linux ~]# name="VBird Tsai"
[root@linux ~]# [ $name == "VBird" ]
bash: [: too many arguments
どうしてですか.$nameは二重引用符で剃らないと、上記の判定式が次のようになります.
[ VBird Tsai == "VBird"]
私たちが望んでいるのではなく
[ "VBird Tsai"== "VBird"]
9、shellの具体的なコードは以下の通りです.
#!/bin/sh
#
# This is a simple shell program
#
# the first line starts with #!,it means to use/bin/sh to explain
# this scirpt
# other lines starting with # means comments,bash ignores these
#
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
name="$1"
ip="163.26.197.1"
exacttime=`date +%Y%m%d`
if [ $# != 1 ]; then
echo "Usage: $0 [username]"
exit
fi
echo "today is $exacttime, your name is $name, from $ip"
echo
echo "Bye-Bye"