1.shell變數和陣列,返回值
變數:
[root@gimi1 ~]# a="test"
[root@gimi1 ~]# echo $a
test
[root@gimi1 ~]# a=1
[root@gimi1 ~]# echo a
a
陣列:
#取單個值
[root@gimi1 ~]# echo $ #從左邊往右取
1[root@gimi1 ~]# echo $ #從右邊往左取
4#取所有值
[root@gimi1 ~]# echo $
1 2 4
[root@gimi1 ~]# echo $
1 2 4
#取陣列長度
[root@gimi1 ~]# echo $
3[root@gimi1 ~]# echo $
3
返回值:
[root@gimi1 ~]# echo $? #$?表示上乙個命令的返回值,0表示執行正確,其他非0值表示出錯
0
2. 特殊符號
`反引號,表示``裡面的內容是要執行輸出的,跟$()類似,但是有的os不支援$().
""裡的字串支援變數替換
''裡的內容是字串值,不支援轉義
\轉義字元
$(())對變數進行操作 $((a+b))
(())整數擴充套件,把裡面的數當整數
({1..10})=seq 1 10, 表示1到10.
3. 字串操作
取子串:$ , $
長度: $
掐頭:
$從左往右匹配,如果左邊一開始就是substring,就會從substring後面開始取所有的值。如果不是第乙個,執行失效,取得整個string的值。
$從左往右匹配,直到找到整個string中最後乙個substring,最後取這個substring後面的所有值。
去尾:$, $與掐頭用法一樣,從右邊取。
替換:
[root@gimi1 ~]# a="test string with adb, adb is a software"
[root@gimi1 ~]# echo $
test string with abc, adb is a software
[root@gimi1 ~]# echo $
test string with abc, abc is a software
4. 算術運算子: +,-,*; 判斷:-eq,-ne,-lt,-le,-gt,-ge
[root@gimi1 ~]# [ 2 -eq 2 ] #中括號與後面的字元一定要有空格
[root@gimi1 ~]# echo $?
0[root@gimi1 ~]# [ 2 -eq 3 ]; echo $?
1[root@gimi1 ~]# [ 2 -ge 1 ]; echo $?
0[root@gimi1 ~]# [ 2 -ge 1 -a 3 -ge 4 ]; echo $? #-a ->and, -o ->or
1
5. 檔案的內建判斷
-e 存在
-d 目錄
-f 普通檔案
-r 可讀
-s 檔案長度不為0,結果為真
-w 可寫
-x 可執行
[root@gimi1 ~]# [ -e f1.sh ]; echo $?
1[root@gimi1 ~]# touch f1.sh
[root@gimi1 ~]# [ -e f1.sh ]; echo $?
0
6. 邏輯控制結構(if, for, while)
if [ 條件 ] ; then ...; elif ...; else ...; fi
簡單的邏輯可以用||,&& #&&前面為true才會執行後面的,||前面的為false時才會執行後面的
[root@gimi1 ~]# if [ -d test ]; then echo exist test; else mkdir test; fi
exist test
[root@gimi1 ~]# [ -d test ] && echo exist test || mkdir test
exist test
for (( c1; c2; c3)); do ...;done
[root@gimi1 ~]# for ((i=0;i<3;i++));do echo $i; done01
2[root@gimi1 ~]# for x in `ls`; do echo $x; done #for 遍歷迴圈
anaconda-ks.cfg
desktop
documents
downloads
f1.sh
music
original-ks.cfg
pictures
public
templates
test
videos
while: while [ 條件 ];do ...;done
[root@gimi1 ~]# while read x; do echo $x;doneaa
eecc
^c[root@gimi1 ~]# i=0;while [ $i -lt 3 ];do echo $i; ((i++));done01
2
7.shell執行環境
bash是乙個程序,它下面還可以啟動子shell,在子shell中定義的變數,會隨著子shell的結束而消失
()子shell中執行,{}當前shell中執行
$$表示當前程序的pid, &表示讓這個命令到後台執行(jobs檢視,fg拉回前台),$!最後乙個job的pid
[root@gimi1 ~]# a="test"
[root@gimi1 ~]# (a=1;echo $a)
1[root@gimi1 ~]# echo $a
test
[root@gimi1 ~]# echo $$
2693
[root@gimi1 ~]# sleep 10 &
[2] 3945
[root@gimi1 ~]# jobs
[1]+ stopped vim 1
[2]- running sleep 10 &
[root@gimi1 ~]# fg 2
sleep 10
shell基礎練習
shell基礎練習 1 編寫shell指令碼,實現1 100的猜數字遊戲。bin bash random隨機函式,100取餘就可以獲得1 100的隨機整數 n random 100 while doread p 請輸入乙個1 100間的整數 n1 n2 echo n1 sed s 0 9 g if ...
shell基礎練習
shell基礎練習 1 編寫shell指令碼,實現1 100的猜數字遊戲。bin bash random隨機函式,100取餘就可以獲得1 100的隨機整數 n random 100 while doread p 請輸入乙個1 100間的整數 n1 n2 echo n1 sed s 0 9 g if ...
shell編寫基礎練習
shell script練習 1.設定和顯示變數,編寫乙個名為sayhello的script,放置於你的啟動檔案中,當你登陸進系統時能根據當時系統時間顯示一條歡迎資訊,比如 good morning good afternoon good evening 1 script bin bash if s...