經常使用的內置命令忽略,來看看shell編程中其餘一些重要的內置命令:php
一、help:顯示全部內置命令列表,或顯示一個具體命令的用法。html
-s: 表示列出命令的語法格式shell
例子:編程
help -s help help: help [-dms] [pattern ...]數組
二、echo:用來顯示一行文字。默認自動換行。bash
-n:取消自動換行。 -e:讓字符串中的特殊字符起做用,即便字符串在單引號中。
例子: echo hello world 或 echo 'hello world' 或 echo "hello world" 輸出結果爲:hello world $echo -e "hello \n world" hello world $ echo -e 'hello \n world' hello world函數
三、printf:顯示格式字符串,相似於c中的printf函數測試
格式:printf 「格式字符串」 參數.net
-v :不顯示到標準輸出,而是賦值給-v選項後面的變量
例子:命令行
str= "hello world" printf "%s\n" "$str" 執行結果:hello world printf -v str "hello world" echo $str 執行結果:hello world printf "%q" "hello world \n" 執行結果:hello\ world\\n 無換行
%q這個選項我想了好久才弄明白它的含義:
將字符串或變量中的轉義字符 用 源碼格式替換。因而,上面的例子中,空格變成了\空格,\變成了\,並且\n沒有了換行的做用
printf詳細用法請參考博客:
http://bbs.chinaunix.net/thread-845520-1-1.html
四、: 什麼也不作,返回0
例子:
: echo $? 運行結果:0
五、. 或 source :在現行shell中執行shell程序
例子:
編輯腳本文件a_var.sh:
#!/bin/bash a=31
保存退出後回到終端,修改a_var.sh的權限並輸入命令:
./a_var.sh
執行,而後在終端執行:
echo $a
輸出結果爲一個空行,意味着變量a的值爲空,咱們再以命令.空格a_var.sh 或source a_var.sh 執行,而後輸入:
echo $a 其輸出結果爲: 31
第一種方式執行a_var.sh,bash會建立一個shell去執行,當子shell執行完成後,它的變量a會被系統收回。
六、alias:顯示或設定程序別名
例子:
alias 執行結果:列出全部的別名 alias ll='ls -al' ll 執行結果:等價於執行了 ls -al
七、unalias:取消別名
alias ll
八、exit :離開腳本或登陸shell,可帶返回值
exit 1
九、history:顯示過去曾經執行過的shell指令,與history命令相關的有三個重要的變量:
HISTFILE :記錄存放歷史命令文件的路徑,如:
echo $HISTFILE 結果爲:/home/kelvin/.bash_history
HISTFILESIZE:設置歷史命令文件命令的最大個數,超過這個個數,序號在前的命令記錄就會被刪除
HISTSIZE:設置終端中交互式命令的歷史記錄個數。它和HISTFILESIZE相比的最小值起做用。
十、fc:列出登陸主機後最近執行過的命令。通常和選項 -l 配合使用。
例子:
$fc -l 結果: 363 cat /etc/profile 364 echo $HISTORY 365 echo $HISTORYFILE 366 echo $HISTFILE 367 ehco $HISTFILESIZE 368 echo $HISTFILESIZE 369 echo $HISTSIZE 370 history 371 history 372 echo $HISTFILE 373 lw 374 ls 375 fc -l 376 fc -l 368 377 fc -l echo l 378 fc -l fc -l 375 列出375行之後的命令 輸出結果: 375 fc -l 376 fc -l 368 377 fc -l echo l 378 fc -l fc -l 375 377 列出375到377之間的命令 輸出結果: 375 fc -l 376 fc -l 368 377 fc -l echo l fc -l echo l 列出從 關鍵字 echo 到 l之間的內容 輸出結果: 372 echo $HISTFILE 373 lw 374 ls
十一、type:對一個命令的類型進行說明(包含命令行程序)。
例子:
$type ls ls 已被別名爲「ls --color=auto」 $type cp cp 是 /bin/cp $type fc fc 是一個 shell 內部命令
十二、set:列出全部變量和函數的內容,加入選項能夠設置bash的某個屬性是否打開
例子:
$set -o 查看全部屬性,或打開某個屬性 allexport off braceexpand on emacs on errexit off errtrace off functrace off hashall on histexpand on history on ignoreeof off interactive-comments on keyword off monitor on noclobber off noexec off noglob off nolog off notify off nounset off onecmd off physical off pipefail off posix off privileged off verbose off vi off xtrace off $set -o notify set -o 打開notify屬性後顯示全部屬性狀態,輸出結果: allexport off braceexpand on emacs on errexit off errtrace off unctrace off hashall on histexpand on history on ignoreeof off interactive-comments on keyword off monitor on noclobber off noexec off noglob off nolog off notify on nounset off onecmd off physical off pipef ail off posix off privileged off verbose off vi off xtrace off set +o notify set -o 關閉notify屬性,並顯示全部屬性狀態: allexport off braceexpand on emacs on errexit off errtrace off functrace off hashall on histexpand on history on ignoreeof off interactive-comments on keyword off monitor on noclobber off noexec off noglob off nolog off notify off nounset off onecmd off physical off pipefail off posix off privileged off verbose off vi off xtrace off
set -C 或 set -o noclobber :保護已存在文件,不讓重定向覆蓋文件內容,只能追加。
例如:
set -C touch a.c echo adfad > a.c 提示出錯: bash: a.c:沒法覆蓋已經存在的文件
但當咱們追加內容時不會提示出錯:
echo adfasf >> a.c
可用set +C 取消
set -u:用於測試變量是否存在
例如:
: $i
echo $? 這兒的返回值應該爲1,由於變量i不存在
i=1 : $i
echo $? 這兒的輸出結果應該是0。一樣,能夠用set +u取消做用
set -v:顯示當前shell的每個執行命令,換句話說,就是把執行的命令打印出來
例如:
kelvin@kelvin-Founder:~$ set -v kelvin@kelvin-Founder:~$ ls ls a.c Linux material project_files record shell software 桌面
可用於對shell腳本的排錯,該屬性可用set +v取消做用
1三、shopt:不少方面都和set命令同樣,但它增長了不少選項。
-s:開啓選項 -u:關閉選項 -o:set -o -q:以返回值的形式表示開關狀態,非0表示關,0表示開
set和shopt 的細節參見:
http://blogold.chinaunix.net/u3/94271/showart.php?id=2195391
1四、read:從標準輸入讀取一行數據
例子:
#!/bin/bash echo "please input your name " read your_name //若是不輸入your_name,讀取結果會默認存入變量ERPLY echo "your name is :" $your_name
執行結果:
please in put your name kelvin your name is : kelvin
read -p "提示信息" ;因此上述sh腳本也可寫成:
#!/bin/bash read -p "please input your name" your_name echo "your name is:" $your_name
read -a arr:將一行數據存入數組arr
例如:
read -a arr <<(echo 1 2 343 23)
這樣,echo ${arr[2]} 的輸出結果就是343
read還能夠讀值給多個變量:
IFS=':' read f1 f2 f3 f4 f5 f6 f7 < /etc/passwd
由於passwd中7個字段是由:分割開的,因此令IFS=':'
1五、time:打印設置命令執行的real user sys時間,real 表示命令真正運行時間,cpu使用時間由兩部分表示: user表示用戶態程序執行時間, sys 表示系統調用時間。
例如:
time ls time ls adf.sh a_var.sh name.sh real 0m0.004s user 0m0.000s sys 0m0.000s
1六、exec:後接命令或程序,執行命令或程序,並取代原來的shell執行環境;執行重定向生效,例如:
exec < file 那麼凡是由標準輸入讀入數據的操做都改成由file讀入數據
1七、eval:讀取變量,並將變量的內容做爲命令執行
例如:
listlog="ls -al /var/log/*.log" eval $listlog
執行結果:ls -al /var/log/*.log將被執行。