初學shell筆記——基礎篇

 

一、test命令內置選項

 

-d         檢查文件是否存在以及該文件是否是目錄文件

-e         檢查文件是否存在

-f         *** ***該文件是否是一個普通文件

-r         *** ***該文件是否可讀

-s        *** ***該文件是否大於0字節

-w       *** ***該文件是否可寫

-x        *** ***該文件是否可執行

 

 

二、gcc調試選項

 

gcc -g 選項使得生成的可執行文件具有gdb調試特性

 

 

三、內置的符號命令

 

 

()          子shell

$()         命令替換

(())        算術表達式計算,let的同義詞(當被括號的值中包含等號時使用)

$(())       算術展開(不用於被括起來的指中包含等號的情形)

[]          test命令

[[]]        條件表達式,類似於[],但是添加了字符串比較

 

 

四、重定向

 

0<  標準輸入重定向

1>  標準輸出重定向

2>  標準錯誤輸出重定向

 

文件描述符 是程序發送輸出和獲取輸入的地方。當執行一個程序時,運行該程序的進程打開3個文件描述符,分別是0(標準輸入)、1(標準輸出)和2(標準錯誤輸出)。

重定向輸出符號(>)是1>的簡寫,它通知shell將標準輸出重定向。類似地,<是0<的簡寫,表示將標準輸入重定向。符號2>將標準錯誤輸出重定向。

 

 

 

五、參數和變量

 

shell變量、用戶創建的變量、關鍵字變量(HOME,PATH)、位置參數變量(引用方式:$!,$?,$#)  

無論何時,用戶輸入的一行命令中的每個參數都將成爲位置參數的值。

set可以用來對位置參數賦值。

變量屬性:

1.readonly使變量值不可變更

2.declare和typeset爲變量賦予屬性

 

        變量屬性(typeset或者declare)

 

    屬 性                      含義

     -a                   聲明一個數組變量

     -f                    聲明一個函數名變量

     -i                    聲明一個整型變量

     -r                    聲明變量爲只讀,也可用readonly

     -x                   輸出變量(設置爲全局變量),也可用export

當用戶登錄之後,shell繼承了用戶的主目錄路徑名並將其賦值給變量HOME

 

PS1:用戶主提示符

$ echo $PS1

/[/e]0;/u@/h: /w/a/]${debian_chroot:+($debian_chroot)}/u@/h:/w/$

 

PS2:用戶次提示符

$echo "$PS2"

>

 

PS3:菜單提示符

PS3保存了用於select控制結構的菜單提示符

 

PS4:調試提示符

$echo "$PS4"

+

 

IFS:分隔輸入字段(分詞)

e.g 

heqiangtheqiang-desktop:~$IFS=p

heqiangtheqiang-desktop:~$aa=export

heqiangtheqiang-desktop:~$echo $aa

ex ort

heqiangtheqiang-desktop:~$cat $aa

cat: ex: 沒有那個文件或目錄

cat: ort: 沒有那個文件或目錄

 

 

            shell特殊字符

  換行符                     啓動命令的執行

   ;                          分隔命令

  ()                        由子shell執行的分組命令,或是標示函數

  &                          在後臺執行命令

  |                         將前一命令的標準輸出發送給其後面的命令的標準輸入(管道)

  >                         重定向標準輸出

  >>                        追加標準輸出

  <                         重定向標準輸入

  <<                        Here文檔

  *                         模糊文件引用中的零個或者多個字符組成的串

  ?                         模糊文件引用中任何單個字符

  /                         引用後面的字符

  ‘                         引用字符串,組織所有替換

  “                         引用字符串,只允許變量替換和命令替換

  '...'                     執行命令替換

  []                        模糊文件引用中的字符類別

   $                        引用某個變量

   .                        執行命令

   #                        開始一行註釋

   {}                       用來封裝函數體

    :(內置空串)               返回true

  &&(布爾與)                只有左邊的命令成功才執行右邊的命令

  ||(布爾或)                只有左邊的命令失敗才執行右邊的命令

  !(布爾非)                反轉命令的退出狀態值

  $()                       執行命令替換

  []                        計算算術表達式的值

 

六、函數

shell將函數存放在內存(RAM)中,所以shell訪問函數的速度要比訪問腳本速度快得多,shell還對函數預處理

 

七、命令行展開

1.展開順序

2.花括號展開

$echo chap_{one,two,three}.txt

chap_one.txt chap_two.txt chap_three.txt

3.代字符展開

$ echo ~

/home/heqiang

4.參數展開和變量展開

5.算術展開

$((expression))

6.命令替換

$(command)

7.分詞  IFS

8.路徑名展開

 

 

在上學期學習網絡操作系統(Redhat 9.0)的時候,老師給我們講shell用了兩節課,當時由於對基礎掌握程度太差,聽的很差勁。最後老師讓分析開機過程/etc/inittab這個腳本時,基本上都看不懂。所以,我決定狠狠把shell基礎這塊弄懂,然後去看系統中一些服務的配置文件,通過這種方式,第一:我想能夠鞏固對shell基礎的掌握,第二:不容易忘記所學的命令。或許在我現在看來,能熟練應用一個linux系統的標準就是能夠把這個系統的一系列管理和配置的命令用的很熟,其次,能夠自己寫出一些控制腳本來管理系統。

 

在瞭解了這麼多shell的基本命令和用法之後,覺得要真正掌握這些技術並不難,但需要堅持練習和使用,相信自己能夠做到~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章