16、常用shell命令方法
1、shell基本
2、父shell在執行shell命令時,通常是創建子shell,繼承父shell環境,執行命令,退出,相關環境銷毀;父shell得到子shell的退出狀態。
通過命令.或source來使其有當前環境中執行,而不創建子進程。
3、通配符與運算符
4、轉義
單引號
?? 硬轉義,單引號內的字符就是其字面意義
雙引號
??? 會進行變量替換
反單引號----$()
??? 會把命令執行的輸出,替換;相當于函數調用,嵌套的變量會一直解析
****/home/edwardlewis/altraman # echo 'date'
date
****:/home/edwardlewis/altraman # echo "date"
date
****:/home/edwardlewis/altraman # echo `date`
Fri Aug 19 07:00:02 CST 2011
5、變量
變量賦值:??? name=value
變量引用:?????? $name
合法的變量名: 字母、下劃線、數字
=號兩邊不容許有空格(否則可能解析成命令,默認情況下IFS為空格)
$name是${name}的縮寫
| $? | 上一命令的退出狀態 |
| $! | 最后一個后臺進程的pid |
| $0 | 當前進程的程序名稱 |
| $$ | 當前進程的進程id號 |
| $n | n為1,2,…n腳本或程序的參數 |
| $@ | 腳本或程序的所有參數 |
| $# | 腳本或程序的參數個數 |
| $UID | 當前用戶的UID |
| $LOGNAME | 當前用戶的用戶名 |
| $HOSTNAME | 主機名 |
| $RANDOM | 1-32767之間隨機數 |
| $SECONDS | 以消耗的秒數 |
| $PWD | 當前工作目錄 |
| $OLDPWD | 最后一次cd前的工作目錄 |
| ~ | HOME |
??? 環境變量env是bash或用戶預設值的變量,可以被繼承并直接使用;當前變量set。local定義局部變量。
a.永久設置
export name=value
./foobar.sh
b.只對一個命令設置
name=value
./foobar.sh
6、結構語句
1)if
[[ ]]? 表達式,測試字符串,文件
(( ))? 表達式,測試數字計算結果
命令的退出碼($?) 為0時,代表true,執行成功
* 匹配零個或多個任意字符
?匹配一個任意字符
[] 字符組,可以匹配字符組中的一個字符
A|B ,A 或者B
示例程序
i=1;
while (( i <= 10 ));
do
((i++))
done
echo i:${i}
for var in *.html
do
if [[ -h $var ]];
??? then "Yes"
fi
done
7、函數
調用:需要先定義后調用,名字+參數(和調用一個命令完全一致)
參數:$1,$2,……$#,$@
返回值:標準輸出
退出狀態:return?$num;或最后一個命令的退出狀態(盡量在$?中返回失敗碼)
注意:函數必須先定義,后調用(local可以定義局部變量)
8、塊重定向
如if,while語句塊,{}
塊中共享同一文件描述符(統一重定向)
除非塊中自行打開關閉
{
echo?msg1
echo?msg2
} >> "$log"
9、簡要說明echo?和print?有何區別?
① print有返回值,成功就返回1,失敗就0,而echo沒有返回值
② echo函數中,可以同時輸出多個字符串,而在print函數中則只可以同時輸出一個字符串。
int?print?(?string?arg)
Outputs?arg.?Returns?1,?always.?
void?echo?(?string?arg1?[,?string?argn...])
Outputs?all?parameters.?
10、其他
ps -ef | grep 'http*' | grep -v 'grep' | wc -l
包含正則表達式盡量用單引號,防止轉義。
參考:
【1】 http://www.cnblogs.com/mydomain/archive/2010/09/24/1833799.html
【2】?http://www.cnblogs.com/mydomain/archive/2010/09/24/1833910.html
總結
以上是生活随笔為你收集整理的16、常用shell命令方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2011阿里巴巴程序设计公开赛 / 10
- 下一篇: [相关总结性文章] 写给即将入行的程序员