Linux shell 程序設計2——bash的內置命令

經常使用的內置命令忽略,來看看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將被執行。

相關文章
相關標籤/搜索