シェル学習ノート
31443 ワード
これは自分でシェルを勉強しているノートです.主に参考にしているのはhttp://www.runoob.com/linux/linux-shell.html
シェル紹介シェルはコマンド言語であり、プログラム設計言語でもあります. は、コマンド言語として、ユーザ入力のコマンドをインタラクティブに解釈して実行する.プログラム設計言語としては、各種変数とパラメータを定義し、循環と分岐を含む多くの制御構造を高度な言語において提供しています. Shellの2つの命令を実行する方法 インタラクティブ(Interactive):ユーザーの命令を実行することを説明し、ユーザーがコマンドを入力すると、Shellは1つのコマンドを実行すると説明します. バッチ処理(Batch):ユーザはあらかじめShellスクリプト(Script)を書いておき、その中には多くのコマンドがあり、 よくあるシェル bash:Linux標準のshell 他のsh、csh、ksh 最初のshell
shellの実行方法は2つあります.直接運行またはshellで実行します.
Shell変数:Shell変数の定義、変数の削除、読み取り専用変数、変数タイプ
変数を定義
指定時に直接値を割り当て、使用時には「$」の記号を使用します. readonlyコマンドを使用して変数を読み取り専用変数と定義できます.読み取り専用変数の値は変更できません. は、unsetコマンドを使用して変数を削除することができます.変数が削除された後は再使用できません.unsetコマンドは読み取り専用変数を削除できません.
変数の種類ローカル変数 環境変数 shell変数 シェル特殊変数
シェル置換
Shell演算子:Shell演算子、関係演算子、ブール演算子、文字列演算子など
算術演算子式と演算子にはスペースがあります. 完全な表現は「包囲 」になります.条件式は、四角い括弧の間に配置され、スペース があります.
文字列演算子 ファイルテスト Shellコメント shには複数行の注釈がありません.
シート文字列 文字列と数字だけがあります. 文字列はシングルクォーテーションマークでもいいし、ダブルクォーテーションマークでもいいです. 単引用符文字列の制限:単引用符の中の任意の文字はそのまま出力されます.単引用符文字列の変数は無効です.単引用符文字列に単引用符が現れません. ダブルクォーテーションの利点:ダブルクォーテーションには変数のダブルクォーテーションがあります.
文字列スティッチング
bashは1次元配列をサポートしています.配列のサイズを制限していません.配列の下付きは0から始まります.
配列の定義 は、配列の各成分 を個別に定義することができる.は、連続した下付きスケーリングを使用しなくてもよく、かつ、下付きの範囲には制限がない. リード配列 である. を表しています.
シェルフロー制御
Here Dcument
Here DcumentはShellの特殊なリダイレクト方式で、入力を対話式Shellスクリプトまたはプログラムにリダイレクトするために使用されます.その基本的な形式は以下の通りです.
//dev/nullファイル
コマンドを実行したいが、出力結果を画面に表示したくない場合、出力を
Shellファイルが含まれています
他の言語と同様に、Shellも外部スクリプトを含んでいます.このように、独立したファイルとしていくつかの共通コードを実装するのに便利です.Shellファイルに含まれる構文フォーマットは以下の通りです.
シェル紹介
Shell
に一回にこれらのコマンドを実行させて、命令を一つずつ鳴らす必要がない.#!/bin/bash
echo "Hello World!"
ヽ約束のマークです.このスクリプトはどのようなインタプリタが実行されるべきかをシステムに教えます.echoコマンドは、テキストをウィンドウに出力します.shellの実行方法は2つあります.直接運行またはshellで実行します.
Shell変数:Shell変数の定義、変数の削除、読み取り専用変数、変数タイプ
変数を定義
指定時に直接値を割り当て、使用時には「$」の記号を使用します.
#!/bin/bash
myUrl="blog.csdn.net/charles1e"
myName="yanke"
echo ${myUrl}
echo ${myName}
myName="Yan Ke"
echo ${myName}
読み取り専用変数#!/bin/bash
myUrl="www.blog.net/charles1e"
readonly myUrl
myUrl="www.blog.net/charles"
実行:./ReadOnlyVariable.sh: line 5: myUrl: readonly variable
変数を削除#!/bin/bash
myName="Yan Ke"
unset myName
echo ${myName}
出力がありません.変数の種類
シェル置換
Shell演算子:Shell演算子、関係演算子、ブール演算子、文字列演算子など
算術演算子
a=10
b=20
val=`expr $a + $b`
echo "a+b: ${val}"
val=`expr $a - $b`
echo "a-b: ${val}"
val=`expr $a \* $b`
echo "a*b: ${val}"
val=`expr $b / $a`
echo "b/a: ${val}"
val=`expr $b % $a`
echo "b%a: $val"
if [ $a == $b ]
then
echo "a is equal to b"
fi
if [ $a != $b ]
then
echo "a is not equal to b"
fi
関係演算子#!/bin/bash
a=10
b=20
if [ $a -eq $b ]
then
echo "$a -eq $b : a is equal to b"
fi
if [ $a -ne $b ]
then
echo "$a -ne $b : a is not equal to b"
fi
if [ $a -gt $b ]
then
echo "$a -gt $b : a is greater than b"
else
echo "$a -gt $b : a is not greater than b"
fi
if [ $a -lt $b ]
then
echo "$a -lt $b : a is lese than b"
else
echo "$a -lt $b : a is not less than b"
fi
if [ $a -ge $b ]
then
echo "$a -ge $b : a is greater or equal to b"
else
echo "$a -ge $b : a is not greater or equal to b"
fi
ブール演算子!
:非-o
:または-a
:文字列演算子
=
は、2つの文字列が等しいかどうかを検出し、trueに戻ります.!=
は、2つの文字列が等しいかどうかを検出し、trueに戻ります.-z
は、文字列長が0かどうかを検出し、0のためにtrueを返します.-n
は、文字列長が0かどうかを検出し、0のためにtrueを返さない.str
は、文字列が空であるかどうかを検出し、空のためにtrueを返さない.#!/bin/bash
file="./helloworld.sh"
if [ -r $file ]
then
echo "File has read access"
else
echo "File does not have read access"
fi
if [ -w $file ]
then
echo "File has write access"
else
echo "File does not have write permission"
fi
if [ -x $file ]
then
echo "File has execute permission"
else
echo "File has no execute permission"
fi
if [ -f $file ]
then
echo "File is an ordinary file"
else
echo "This is a special file"
fi
if [ -d $file ]
then
echo "File is a directory"
else
echo "This ia not a directory"
fi
if [ -s $file ]
then
echo "File size is zero"
else
echo "File size is not zero"
fi
if [ -e $file ]
then
echo "File exits"
else
echo "File does not exit"
fi
File has read access
File has write access
File has execute permission
File is an ordinary file
This ia not a directory
File size is zero
File exits
-b file
は、ファイルがブロックデバイスファイルであるかどうかを検出し、もしそうであれば、trueに戻ります.-c file
は、ファイルが文字デバイスファイルであるかどうかを検出し、もしそうであれば、trueに戻ります.-d file
は、ファイルがディレクトリであるかどうかを検出し、もしそうであれば、trueに戻ります.-f file
は、ファイルが通常のファイルであるかどうか(ディレクトリでもデバイスファイルでもない)を検出し、もしそうであれば、trueに戻ります.-g file
は、ファイルがSGIDビットを設定しているかどうかを検出し、もしそうであれば、trueに戻ります.-k file
は、ファイルに粘着ビットが設定されているかどうかを検出し、もしそうであれば、trueに戻ります.-p file
は、ファイルが有名なパイプであるかどうかを検出し、もしそうであれば、trueに戻ります.-u file
は、ファイルにSUIDビットが設定されているかどうかを検出し、もしそうであれば、trueに戻ります.-r file
は、ファイルが読み込まれているかどうかを検出し、もしそうであれば、trueに戻ります.-w file
は、ファイルが書き込み可能かどうかを検出し、もしそうであれば、trueに戻ります.-x file
は、ファイルが実行可能かどうかを検出し、もしそうであれば、trueに戻ります.-s file
は、ファイルが空かどうか(ファイルサイズが0より大きいかどうか)を検出し、空のためにtrueに戻りません.-e file
は、ファイル(ディレクトリを含む)が存在するかどうかを検出し、もしそうであれば、trueに戻ります.#
で始まる行は注釈であり、解釈器によって無視されます.シート文字列
文字列スティッチング
#!/bin/bash
name="yanke"
greeting="hello, "${name}"!"
greeting1="hello, ${name}!"
echo ${greeting} ${greeting1}
文字列の長さ$ string="abcd"
$ echo ${#string}
4
文字列の切り取り$ string="Talk is cheap,show me the code!"
$ echo ${string:1:4}
alk
シェル配列bashは1次元配列をサポートしています.配列のサイズを制限していません.配列の下付きは0から始まります.
配列の定義
array_name=(value0 value1 value2 value3)
${array_name[index]}
#!/bin/bash
Name[0]='Zara'
Name[1]='Qadir'
Name[2]='Mahnaz'
Name[3]='Ayan'
#
echo "first index: ${Name[0]}"
echo "Second inde;inde;x: ${Name[1]}"
#
echo "First Method:${Name[*]}"
echo "Second Method:${Name[@]}"
#
length=${#Name[*]}
#
#length=${#Name[@]}
#
lengthn=${#Name[2]}
echo "The length of Name:${length}"
echo "The length of Name[2]:${lengthn}"
first index: Zara
Second inde;inde;x: Qadir
First Method:Zara Qadir Mahnaz Ayan
Second Method:Zara Qadir Mahnaz Ayan
The length of Name:4
The length of Name[2]:6
Shell echoコマンド#!/bin/bash
#echo :
#echo arg
#
echo "\"It is a test\""
#
name="OK"
echo "${name} It is a test"
#
echo -e "OK!
" #-e
echo "It's a test"
#
echo -e "OK!\c"
echo "It's a test"
#
echo "It is a test" > myfile
#
echo '$name\"'
#
echo `date`
"It is a test"
OK It is a test
OK!
It's a test OK!It's a test
$name\" Thu Sep 29 22:08:53 CST 2016
Shell printfコマンド#!/bin/bash
#printf :
#printf format-string [arguments..]
#format-string
#arguments
echo "Hello, Shell!"
printf "Hello Shell
" #printf
##
printf "%-10s %-8s %-4s
" kg
printf "%-10s %-8s %-4.2f
" 66.1234
printf "%-10s %-8s %-4.2f
" 48.6543
printf "%-10s %-8s %-4.2f
" 47.9876
#format-string
printf "%d %s
" 1 "abc"
#
printf '%d %s
' 1 "abc"
#
printf %s abcdef
# ,
printf %s abc def
printf "%s
" abc def
printf "%s %s %S
" a b c d e f g h i j
# guments, %s NULL ,%d 0
printf "%s and %d
"
変換記号:\a
警告文字は、通常ASCIIのBEL文字\b
後退\c
は、出力結果の任意の終端の改行文字(%b
フォーマット・インジケータによって制御されたパラメータ文字列のみで有効)を抑制し、また、パラメータ内に残された文字、次のパラメータ、および任意のフォーマット文字列内に残された文字は無視される.\f
ページを切り替える
改行\r
リターン\t
水平タブ\v
垂直タブ\\
文字の上のバックボーン\ddd
は、1から3桁の8進数の値を表す文字です.フォーマット文字列だけで有効です.\0ddd
は、1から3ビットの8進数文字シェルフロー制御
#!/bin/bash
#for
for loop in 1 2 3 4 5
do
echo "The value is : $loop"
done
#while
i=1
while(( ${i}<=5 ))
do
echo $i
let "i++"
done
#while
#echo " <CTRL-D> "
#echo -n " :"
#while read FILM
#do
# echo " !${FILM} "
#done
#until : , while
#case
echo " 1 4 "
echo -n " :"
read aNum
case ${aNum} in
1) echo " 1"
;;
2) echo " 2"
;;
3) echo " 3"
;;
4) echo " 4"
;;
*) echo " 1 4 "
;;
esac
#
#break
#continue
while :
do
echo -n " 1 5 :"
read num
case ${num} in
1|2|3|4|5) echo " $num"
;;
*) echo " 1 5 , !"
break
;;
esac
done
while :
do
echo -n " 1 5 :"
read num
case ${num} in
1|2|3|4|5) echo " $num"
;;
*) echo " 1 5 "
continue
echo " "
;;
esac
done
シェル関数$#
からスクリプトに渡されたパラメータ個数$*
は、スクリプトに渡されたすべてのパラメータ$$
シナリオによって実行されている現在のプロセスID番号$!
のバックグラウンドで実行されている最後のプロセスのID番号$@
は$*
と同じであるが、使用時に引用符を付けて各パラメータを返す.$-
は、Shellが使用していることを表示する.現在のオプションは、setコマンド機能と同じです.$?
は最後のコマンドの終了状態を表示します.0はエラーがないことを示しています.他のどの値もエラーがあることを示しています.#!/bin/bash
#
#1、 function fun() , fun() , 。
#2、 , :return , , , 。 return n(0-255)))
demoFuc()
{
echo "Hello world!"
}
echo "-------- -----------"
demoFuc
echo "-------- -----------"
# : return
fucWithReturn()
{
echo " "
echo -n " :"
read num1
echo -n " :"
read num2
echo " ${num1} ${num2}"
return $((${num1} + ${num2}))
}
fucWithReturn
echo " :$? ."
# :$n
funWithParam()
{
echo " :$1 ."
echo " :$2 ."
echo " 10 :${10} ."
echo " :$# ."
echo " : $* ."
}
funWithParam 1 2 3 33 544 5 33 23 23 53 45 22 33
シェル入出力リダイレクトcommand > file
は出力をfileにリダイレクトします.command < file
は入力をfileにリダイレクトします.command >> file
は出力を追加的にfileにリダイレクトします.n > file
はファイル記述子がnのファイルをfileにリダイレクトします.n >> file
はファイル記述子がnのファイルを追加的にfileにリダイレクトします.n >& m
は出力ファイルmとnをマージします.679142は入力ファイルmとnを結合し、n <& m
は開始フラグと終了フラグの内容を入力とする.Here Dcument
Here DcumentはShellの特殊なリダイレクト方式で、入力を対話式Shellスクリプトまたはプログラムにリダイレクトするために使用されます.その基本的な形式は以下の通りです.
command << delimiter
document
delimiter
2つのdelimiterの間の内容を入力としてcommandに伝える役割を果たしています.注意:1.エンディングのdelimiterは必ずトップに書いてください.前には文字がなく、後ろにはスペースやtabを含めて字を詰めてはいけません.2.最初のdeliterの前後のスペースは無視されます.//dev/nullファイル
コマンドを実行したいが、出力結果を画面に表示したくない場合、出力を
<< tag
:/dev/null
$ command > /dev/null
にリダイレクトすることができ、特殊なファイルであり、書き込みの内容は全部破棄されます.このファイルからコンテンツを読み取ることを試みると、何も読めません.しかし、/dev/null
ファイルは非常に有用で、コマンドの出力をリピートします.方向を向けると、「出力禁止」の効果があります.もしシールドしたい場合は、/dev/null
と書いてもいいです.Shellファイルが含まれています
他の言語と同様に、Shellも外部スクリプトを含んでいます.このように、独立したファイルとしていくつかの共通コードを実装するのに便利です.Shellファイルに含まれる構文フォーマットは以下の通りです.
$ command > /dev/null 2>&1
または. filename # (.)
は、2つのshellスクリプトファイルを作成する.test 1.shコードは以下の通りです.#!/bin/bash
# author:
# url:www.runoob.com
url="http://www.runoob.com"
test 2.shコードは以下の通りです.#!/bin/bash
# author:
# url:www.runoob.com
# . test1.sh
. ./test1.sh
#
# source ./test1.sh
echo " :$url"
次に、私達はtest 2 shに実行可能な権限を追加して実行する.source filename
$ chmod +x test2.sh
$ ./test2.sh
注:含まれるファイルtest 1.shは実行可能な権限を必要としない.