title: shell 入門學習
date: 2019/7/16 15:47:49
toc: true
---linux
linux c 一站式學習筆記shell
https://ss64.com/bash/syntax.html編程
使用#
註釋一行bash
#!
在第一行稱爲Shebang
,表示腳本解釋器是什麼,好比!# bin/bash
函數
文件首行的!#
不只能夠指定程序,還能指定參數#! /bin/sed -f
,增長了這個shebang
的腳本能夠不用指定程序,直接使用./xxx.腳本
執行學習
man bash-builtins
查看內建命令測試
爲何須要內建命令?ui
shell的外部命令流程是先fork出一個shell後執行exec執行命令,fork後返回會恢復父進程的上下文,因此諸如cd等命令就不能產生效果了.net
內建命令使用$?
讀出返回的狀態
命令行下輸入的命令用()括號括起來,那麼也會fork出一個子Shell執行小括號中的命令
使用source xxx.sh
或者. ./xxx.sh
改變子進程,不會影響交互式(父)shell
交互登陸bash的環境變量順序 搜索A *login shell* is one whose
/etc/profile ~/.bash_profile, ~/.bash_login, and ~/.profile 退出 /etc/bash.bash_logout
~/.bashrc
,使用--norc
禁用這個操做BASH_ENV
決定, 它的值看成啓動腳本的文件名--login
,模擬交互登陸bash的環境變量順序,/etc/profile ~/.profile
if [ -n "$ENV" ]; then . "$ENV"; fi
#! /bin/sh
,則不執行任何啓動腳本*
匹配0或者任意個字符
?
匹配一個任意字符
[xxx]
,匹配方括號中任意一個字符的一次出現
` 和 $() 命令代換明顯執行後計算結果複製變量
$(())
變量轉換爲整數,只能作加減乘除的整數運算
轉義字符是\
,shell輸入時還表示換行繼續
建立帶有-
開頭的文件touch -- -a.c
雙引號用於保持引號內全部字符的字面值(回車也不例外),但如下狀況除外:
$加變量名能夠取變量的值 反引號仍表示命令替換 \$表示$的字面值 \`表示`的字面值 \"表示"的字面值 \\表示\的字面值 除以上狀況以外,在其它字符前面的\無特殊含義,只表示字面值
$0 | 命令自己 |
---|---|
$一、 $2.. | 參數 |
$# | 參數個數,不包括$0 |
$@ | 表示參數列表"$1" "$2" ...,例如能夠用在for循環中的in後面。 |
$? | 上一條命令的Exit Status |
$$ | 當前Shell的進程號 |
shift | shift 3表示原來的$4如今變成$1,不帶參數的shift命令至關於shift 1 |
參考
/etc/init.d/
下的腳本
if then elif then else fi case $xxx in a) ... ;; b) ... ;; *) esac for xxx in xxxx done while xxx;do xxx done
true =0,false=1,這與c語言相反
命令test
和[
能夠測試條件是否成立
$?
是退出狀態
-eq(等於) -ne(不等於) -lt(小於) -le(小於等於) -gt(大於) -ge(大於等於)
測試表達式的鏈接符號 ! 邏輯反 -a 與 -o 或
做爲一種好的Shell編程習慣,應該老是把變量取值放在雙引號之中,好比"$VAR"
,p602 linuxc 一站式編程
多個命令在一行用;
隔開,一行一個命令不須要;
:
是一個特殊的命令,稱爲空命令,該命令不作任何事,但Exit Status
老是真
&&
至關於「if...then...」
,而||
至關於if not...then...
$1
shell中第一個參數,$0
爲命令自身,$#
是參數個數,布包裹$0
mkdir $DIR > /dev/null 2>&1
,這裏先將標準輸出重定位到null
,而後標準錯誤輸出也到標準輸出,使用&
的緣由是這裏是引用標準輸出,不加引號的話就是1這個文件了
-n | 讀取不執行.相似編譯 |
---|---|
-v | 一邊執行,一遍打印標準錯誤 |
-x | 打印執行的每句話和結果 |
使用
$ sh -x ./script.sh #! /bin/sh -x 腳本中設置,set -x和set +x分別表示啓用和禁用-x參數,這樣能夠只對腳本中的某一段進行跟蹤調試 #! /bin/sh if [ -z "$1" ]; then set -x echo "ERROR: Insufficient Args." exit 1 set +x fi