bash基礎,gitbash
1 概念
bash(sh,pdsh擴充): GNU Bourne-Again Shell
sh:Bourne Shell,編程優秀,使用者互動不便。
csh:C Shell,編程介面不如sh,使用者介面友好,與C語言文法相似。 ——>tcsh
ksh:Korn Shell,整合了sh和csh的優點,並完全相容sh。 ——>pdsh(Public Domain Korn Shell)
zsh
2 文法2.1 變數,資料類型
變數定義:不含保留字(例如“-,*”等),不含空格。
變數的引用:賦值,for迴圈前不需帶$;其他情況引用變數需要帶"$"(例如,列印,運算等)。
資料類型:shell變數沒有資料類型。
shell語句:=左右不能有空格;shell語句不以”;“結尾。
2.1.1 整數運算(+-*/%):let,expr
1)let:雙引號
例如,let "x=$x+1"
2)expr:`,空格,特殊字元前需要使用轉義符號\
例如,x=`expr $x + 4`,x=`expr $x \* 4`
【PS】不能進行浮點數運算,沒有浮點數資料類型。
【例子:算術運算,字元拼接,shell的無資料類型】
#!/bin/bash
x=2007
let "x=$x+1"
echo $x
x=`expr $x + 4`
echo $x
echo $(expr $x / 2)
x='Olmpic'$x
echo x=$x
y=12
y=`expr $y \* 2`
echo $y
2.1.2 賦值
x=200
let "x=$x+1"
x=’hello’$x
y=$(expr $x / 2)
y=`expr $y \* 2`
result=$(($result+$num))
num=$((num+1))
2.1.3 比較操作
1)-eq,-ne,-gt和-ge,-lt和-le,-z(為空白),-n(非空)
2)=,!=,>(無>=),<(無<=)
【PS】
字串比較時,盡量不用-z,而用!-n代替。
能用1)盡量不用2)。
2.1.4 按位操作
&,|
【位元運算:】
ckm@bidc:~/zzhTest> echo $(expr 1 \& 0)
0
ckm@bidc:~/zzhTest> echo $(expr 1 \| 0)
1
#!/bibn/bash
if [ $str !-n ];then
echo null!!
fi
2.2 流程式控制制2.2.1 if條件控制
if [ expression ] ;then statements
fi
if [ expression ] ;then statements
else statements
fi
if [ expression ] ;then statements
else if [ expression ] then statements
else statements
fi
if [ expression ] ;then statements
elif [ expression ] ;then statements
else statements
fi
【PS】
若then換行,則then前無需加;。
[和]的後、前有空格。
2.2.2 case分支結構
case "$var" in
cindition1 ) statements;;
cindition2 ) statements;;
...
* ) statements;;
esac
2.2.3 for迴圈
for var in [ list ];do
statements
done
【PS】
var 變數的引用不使用$。
<list>的元素用空格分隔。
2.2.4 while迴圈
while [ condition ]
do
statements
done
2.2.5 until迴圈
until [ condition ]
do
statements
done
2.2.6 break/continue
3 bash指令碼例子【hello world】指令碼的執行:hello
#!/bin/bash
#變數的使用
str='hello world'
echo $str
echo str
--執行檔案
bash hello
sh hello
chmod u+x hello
hello
【Linux常用命令】
vi zzhdir
#!/bin/bash
ls –a
--執行
sh zzhdir
【局部變數:局部變數的範圍(函數體內)】
#!/bin/bash
function test {
local var=world
echo $var
}
var=hello
echo $var
test
echo $var
【PS】局部變數:首次被賦值時,變數前面加上local。
【if條件:比較操作,if條件控制結構】
#!/bin/bash
a=10
if [ $a -gt 0 ]
then echo 1
else echo 2
fi
【if條件:帶參指令碼】
#!/bin/bash
if [ $1 = 10 ];then echo right!
else echo wrong!
fi
--執行
sh test 123
【PS】$1用於匹配命令列的第1個參數。(bash中的保留字)
【case分支】
var=12
case "$var" in
[a-z] ) echo 'lowercase letter!';;
[0-9] ) echo 'number';;
* ) echo other character!;;
esac
【for迴圈:無in [list]】
for var ;do
echo ok
done
--執行
sh test
sh test 1 "hello world" a
【for迴圈:i的範圍】迴圈體內部(do/done之間)
for i in $(seq 5)
do
echo $i
done
echo $i
--執行
sh test
【for迴圈:seq】
for i in `seq 1 5`;do
echo TEST!
done
【for迴圈:i的範圍】定義後的程式塊
for((i=1;i<=5;i++));do
echo $i
done
echo $i
--執行
sh test
【for迴圈:命令列參數】。
for param
do
echo $param
done
--執行指令碼
sh test 123 456 789
【PS】未指定list,將列印所有命令列參數;當沒有命令列參數時,什麼都不列印
【while迴圈】
num=1
result=0
while [ $num -le 3 ]
do
result=$(($result+$num))
num=$((num+1))
done
echo $result
【until迴圈】
num=1
result=0
until [ $num -ge 3 ]
do
result=$(($result+$num))
num=$((num+1))
done
echo $result
【break/continue】
for i in `seq 1 5`;do
if [ $i = 3 ];the
continue
else echo $i
fi
done
4 Vi編輯器
命名模式:Esc鍵,“:”英文冒號,“wq”儲存退出,“q!”強制退出
插入模式:aAiIuU
刪除單詞:dw
刪除整行:dd
字串尋找:“/”正斜杠
5 相關拓展
保留字
正則
函數
輸入,輸出: >,>>,>2,>1,>&
For迴圈
變數的作用:整數,字串,計數,檔案屬性
次元立方
[bash]$ 什意思?
就是個提示符,bash是shell指令碼中得一種。linux中,$代碼普通使用者,#代表root使用者。
都是linux基礎,學學吧。
對於Linux ,Bash ,Shell的概念問題
1.是
2.區別大,你會寫bash shell不代表你會寫c shell,不過我覺得你會寫一個shell指令碼
另一種你上手也很快,起碼讀懂應該問題不大。你可以先學bash shell因為用的比較多
而且可移植性強,bash 是shell的一種。
3.屬於shell,只安裝了bash shell就可以運行bash shell指令碼,並不是針對某個系統或者發行版本。
shell這種東西可以隨意安裝的。你用習慣哪個shell,就算初裝系統裡沒有,你也可以單獨安裝一個
4.給你推薦兩本書
《Bash shell進階指令碼指南》
《實戰LINUX+SHELL編程與伺服器管》
shell編程,可以說直接反應出你對linux命令掌握的熟練度問題,什麼情況下用哪種命令更符合
你的工作需求,怎麼簡化指令碼運行過程,最佳化指令碼讓它更有效率。
你在學習過程中必然會接觸到sed,awk這種流編輯器。然後你還得學習sed,awk。
漸漸地估計你就該選擇一門更強大的程式設計語言,而不僅限於寫shell指令碼,比如選perl.python,php.
C,或者什麼語言...基本上都是這個過程。