shell基礎練習

2021-10-14 14:33:00 字數 3621 閱讀 8063

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...