10分鐘精通shell編程!
一、輸入輸出重定向
標準輸入 /dev/stdin 0 鍵盤
標準輸出 /dev/stdout 1 顯示器
標準錯誤輸出 /dev/stderr 2 顯示器
#設備文件名 #文件描述符 #默認設備
1)輸出重定向
把應該輸出到屏幕的輸出,重定向到文件。
> 覆蓋 >> 追加
ls > aa 覆蓋到a ls >> aa 追加到aa
ls gdlslga 2>>aa 錯誤信息輸出到aa 強調:錯誤輸出,不能有空格
ls &>aa 錯誤和正確都輸入到aa
掌握(查看系統版本:uname -r)
ls >> aa 2>>bb 正確信息輸入aa,錯誤信息輸入bb
ls >> aa 2>&1 錯誤和正確都輸入到aa,可以追加
2>&1 把標準錯誤重定向到標準正確輸出
二、多命令順序執行
1)命令1 ; 命令2;命令3 命令123順序執行。之間沒有任何關係如:cd;ls ;date #date 用於打印當前系統時間
2)命令1 && 命令2 命令1正確執行後,命令2纔會執行
3)命令1 || 命令2 命令1執行不正確,命令2纔會執行,也就是說:如果第一個命令正確執行,那麼第二個命令就不會執行了!
類test測試:
a)ls && echo "Yes" || echo "No"
b)ls skdjfkdj && echo "Yes" || echo "No"
lsaa && echo "cunzai" || echo "bu cunzai!" 執行ls aa,判斷如果正確,輸出“存在”。如果不存在,輸出“不存在”
三、管道符:兩個命令之間有聯繫,
命令1 | 命令2 命令1的執行結果,作爲命令2的執行條件
注意:第一條命令一定得有輸出
netstat-tlun | grep 80 查詢監聽的端口號,並查看80端口是否啓動。
附:netstat-tlun列出監聽了多少個端口;
grep提取命令,如 grep80 #提取包含有80的行
80是Apache的端口
ls -l /etc/ | more 分屏顯示ls內容
ls-l /etc/ | grep vim
四、變量:
Linux的Shell將所有的變量都識別程字符串型
設置變量的目的:像程序腳本中傳值。
1分類
本地變量、環境變量、位置參數變量、預定義變量
2本地變量
1)聲明 變量名=變量值 注意:=號左右不能有空格 aa=123
2)調用 echo $變量名
3)查看變量 set 查看所有變量,包括環境變量和本地變量
4)刪除 unset 變量名
3變量設定規則
1)變量以等號連接值,等號不能有空格
2)變量名由數字和字母和下劃線組成,不能以數字開頭
3)變量值中有空格,用引號括起來如:aa=”helloworld” #其中不能有符號!!!
4)雙引號內,有特殊字符。如$
5)單引號中特殊字符無含義
6)在變量值中,可以使用\轉義符
7)變量值可以直接調用系統命令。 `命令` $(命令)
如cc=`ls/dev` # ` 是反引號,Esc鍵下的那個
或者:cc=$(ls/dev) 作用相同,推薦!
調用:echo$cc
8)變量值可以累加 aa=123 aa="$aa"456 echo $aa --->123456
9)環境變量一定設爲大寫
環境變量配置文件
/etc/bashrc 所有用戶生效
/etc/profile
~/.bashrc只對指定用戶生效
~/.bash_profile
五、位置參數變量
$0 命令自己
$1 第一個參數
$2 第二個參數
$9 第九個參數
$? 上一個命令的返回值:0 上一個命令正確執行;非0 上一個命令不正確
$# 統計命令之後的參數個數 $* 返回所有參數 $n 位置參數變量
六、常見命令 常用命令
1 行提取命令grep
選項: -v 反向選擇
-n 提取時,顯示行號
舉例:
grep "[^a-z]hen" test.txt
oo前不是小寫字母的行匹配。 注意:和開頭沒有關係
附:也可以結合以前的內容:grep-n "[^a-z]hen" test_rule.txt
中括號代表一個字母,^代表取反,a-z代表小寫字母a到z
grep “\.$” test.txt
匹配以.結尾的行
附:在正則表達式中$代表行尾;
\ 代表轉義符,表示,將其後緊跟字符的特殊含義消失!
Linux中行尾的空格附,也可以作爲一個字符,一定要記住!這是一些腳本發生錯誤的原因!
grep "^[^A-Za-z]" test.txt
匹配不以字母開頭的行 注意:所有字母不能這樣寫 A-z
附:
^在中括號外面代表行首
grep"^[^a-zA-Z]" test_rule.txt #這樣也可以
grep “^$” test.txt
匹配空白行
grep "oo*" test.txt
匹配最少一個o
附:o*代表着*前面的這個o可以重複0到無數多次
還可以這樣用:grep"hh*o" test_rule.txt
這樣: grep"ooo" test_rule.txt
echo命令
echo -e “輸出內容”
-e 識別格式化打印內容
echo -e “1\t2\t3” 打印tab鍵
echo -e "\e[1;31m this is red text \e[0m" 輸出紅色字體
\e[ 格式標誌
1;31m 指定顏色 #30到39之間的數字
0m 恢復顏色(重置)
附:30m=黑色,31m=紅色,32m=綠色,33m=黃色,34m=藍色,35m=洋紅, 36m=青色,37=白色
echo -e “\e[1;42 background \e[0m”
判斷字符串
[-z 字符串] 判斷字符串是否爲空,變量值沒有內容/爲空則是真