久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

《Linux命令行與shell腳本編程大全》使用其他shell

 HoldOn0605 2016-07-01
《Linux命令行與shell腳本編程大全》使用其他shell
什么是dash shell
Debian的dash shell是ash shell的直系后代,,ash shell是Unix系統(tǒng)上原來地Bourne shell的簡化版本。
NetBSD Unix操作系統(tǒng)移植了ash shell,并且作為默認(rèn)shell。NetBSD開發(fā)人員給ash shell添加了一些新功能,,使它更接近Bourne shell。新功能包括:emacs和vi編輯器命令進行命令行編輯,,以及歷史命令來查看前面輸入的命令,。ash shell這個版本也被FreeBSD作為默認(rèn) 登錄shell
Debian Linux發(fā)行版創(chuàng)建了它自己的ash shell版本(稱作Debian ash或dash)。
在很多基于Debain的Linux上默認(rèn)shell并不是dash shell,,而是bash shell,。
Ubuntu Linux發(fā)行版將bash shell作為登錄shell,將dash shell用做默認(rèn)的/bin/sh shell,。
大多數(shù)Linux發(fā)行版上,/bin/sh文件是鏈接到/bin/bash shell程序的一個符號鏈接,。
dash shell的特性
dash命令行參數(shù)
dash命令行參數(shù)
參數(shù) 描述
-a 導(dǎo)出分配給shell的所有變量
-c 從特定命令字符串讀取命令
-e 如果是非交互式shell的話,,在有未經(jīng)測試的命令失敗時立即退出
-f 顯示路徑名通配符
-n 如果是非交互式shell的話,讀取命令但不執(zhí)行它們
-u 在嘗試展開一個未設(shè)置的變量時,,將錯誤消息寫出到STDERR
-v 在讀取輸入時將輸入寫出到STDERR
-x 在執(zhí)行命令時將每個命令寫出到STDERR
-I 在交互式模式下,,忽略輸入中的EOF字符
-i 強制shell運行在交互式模式下
-m 打開作業(yè)控制(在交互式模式下默認(rèn)開啟)
-s 從STDIN讀取命令(在沒有指定文件參數(shù)時的默認(rèn)行為)
-E 打開emacs命令行編輯器
-V 打開vi命令行編輯器
dash環(huán)境變量
變量 描述
CDPATH cd命令的搜索路徑
HISTSIZE 歷史記錄文件中保存的行數(shù)
HOME 用戶的默認(rèn)登錄目錄
IFS 輸入字段分隔符。默認(rèn)值是空格,、制表符和換行符
MAIL 用戶收件箱文件的名稱
MAILCHECK 在收件箱文件中檢查新郵件的頻率
MAILPATH 冒號分割的多個收件箱文件名稱,。設(shè)置了的話,這個值會覆蓋MAIL環(huán)境變量
OLDPWD 上一個工作目錄的值
PATH 可執(zhí)行文件的默認(rèn)查找路徑
PPID 當(dāng)前shell的父進程的進程ID
PS1 shell的主命令行交互提示符
PS2 shell的次命令行交互提示符
PS4 當(dāng)設(shè)置了執(zhí)行追蹤時,,在每行前面打印的一個字符
PWD 當(dāng)前工作目錄
TERM shell的默認(rèn)終端設(shè)置
dash用set命令顯示環(huán)境變量
位置參數(shù)
$0:shell的名稱
$n:第n個位置的參數(shù)
$*:含有所有參數(shù)內(nèi)容的單個值,,由IFS環(huán)境變量中的第一個字符分隔;沒定義IFS的話由空格分隔
$@:將所有的命令行參數(shù)展開為多個參數(shù)
$#:位置參數(shù)的總數(shù)
$?:最近一個命令的退出狀態(tài)碼
$-:當(dāng)前選項標(biāo)記
$$:當(dāng)前shell的進程ID(PID)
$!:最近一個后臺命令的進程ID(PID)
用戶自定義的環(huán)境變量
同bash規(guī)則完全一致
注意:dash的變量不支持可變數(shù)組,!
dash內(nèi)建命令
dash shell內(nèi)建命令
命令 描述
alias 創(chuàng)建代表文本字符串的別名字符串
bg 以后臺模式繼續(xù)指定的作業(yè)
cd 切換到指定目錄
echo 顯示文本字符串和環(huán)境變量
eval 將所有參數(shù)用空格連起來(重新解析并執(zhí)行這條命令)
exec 用指定命令代替shell進程
exit 終止shell進程
export 導(dǎo)出指定的環(huán)境變量,,供子shell使用
fc 列出、編輯或重新執(zhí)行之前在命令行中輸入的命令
fg 以前臺模式繼續(xù)指定的作業(yè)
getopts 從一列參數(shù)中提取選項和參數(shù)
hash 維護并提取最近執(zhí)行的命令和他們的位置的哈希表
pwd 顯示當(dāng)前工作目錄的值
read 從STDIN讀取一行并將其賦給一個變量
readonly 從STDIn讀取一行并賦給一個不能修改的變量
printf 用格式化過的字符串顯示文本和變量
set 列出或設(shè)置選項標(biāo)記和環(huán)境變量
shift 按指定的次數(shù)移動位置參數(shù)
test 測試一個表達式,,成立返回0,,否則返回1
times 顯示當(dāng)前shell和所有shell進程的累計用戶和系統(tǒng)時間
trap 在shell收到某個指定的信號時解析并執(zhí)行命令
type 解釋指定的名稱并顯示解析結(jié)果(別名,、內(nèi)建、命令或關(guān)鍵字)
ulimit 查詢或設(shè)置進程限制
umask 設(shè)置默認(rèn)文件值和目錄權(quán)限
unalias 刪除指定的別名
unset 從導(dǎo)出的變量中刪除指定的變量或選項標(biāo)記
wait 等待指定的命令完成然后返回退出
dash shell內(nèi)建命令沒有操作歷史記錄或目錄棧的命令
dash腳本編程
創(chuàng)建dash腳本
同bash一樣,,在第一行加上#!/bin/dash 就可以了,。
不能使用的功能
bash shell有些功能沒法在dash shell中使用,這些通常稱作bash主義(bashism),。
1.使用算數(shù)運算
bash中支持下面3種方式:
使用expr命令:expr operation
使用方括號:$[ operation ]
使用雙圓括號:$(( operation ))
dash只支持expr命令和雙圓括號,,不支持方括號!
2.test命令
bash shell的test命令允許使用雙等號“==”來測試兩個字符串是否相等
dash shell的test命令只能識別“=”來比較字符串
3.echo語句選項
dash shell的echo能自動識別特殊字符,,所以也沒有-e選項,,如果使用-e,echo會將它視為普通文本
可以用printf顯示文本,,printf在dash shell和bash shell中行為完全一致,。
4.function命令
dash shell不支持使用function命令創(chuàng)建函數(shù),必須使用函數(shù)名+圓括號的方式
zsh shell
zsh shell一些獨特的功能:
改進的shell選項處理
shell兼容性模式
可加載模塊
zsh shell的組成
zsh shell命令行參數(shù)
參數(shù) 描述
-c 只執(zhí)行指定的命令,,然后退出
-i 做為交互式shell啟動,,會提供一個命令行交互提示符
-s 強制shell從STDIN讀取命令
-o 指定命令行選項
-o允許設(shè)置shell選項來配置shell的功能
選項可以分成以下幾大類:
更改目錄:控制cd和dirs命令如何處理目錄更改的選項
補全:控制命令補全功能的選項
擴展和擴展匹配:控制命令中文件擴展的選項
歷史記錄:控制命令歷史記錄的選項
初始化:控制shell在啟動時如何處理變量和啟動文件的選項
輸入輸出:控制命令處理的選項
作業(yè)控制:控制shell如何處理作業(yè)和啟動作業(yè)的選項
提示:控制shell如何處理命令行提示符的選項
腳本和函數(shù):控制shell如何處理shell腳本和定義函數(shù)的選項
shell模擬:允許設(shè)置zsh shell來模擬其他類型shell行為的選項
shell狀態(tài):定義啟動哪種shell的選項
zle:控制zsh行編輯器功能的選項
選項別名:可以用做其他選項別名的特殊選項
1.shell狀態(tài)選項
有6種不同的zsh shell選項來定義shell啟動的類型
交互模式(-i,interactive):提供了命令行界面提示符來輸入內(nèi)建命令和程序名
登錄模式(-l,,login):默認(rèn)的zsh shell類型,,處理zsh shell的啟動文件并提供命令行界面提示符
特權(quán)模式(-p,privileged):有效的用戶ID(EUID)跟實際用戶ID不一致(用戶成為了root用戶)時的默認(rèn)類型,。它會禁止用戶啟動文件,。
限制模式(-r,restricted):在shell中將用戶限定在特定目錄結(jié)構(gòu)中
shin_stdin模式(-s):從STDIN讀取命令
single_command模式(-t):執(zhí)行一條從STDIN讀取的命令,,然后退出,。
shell狀態(tài)定義了shell是否在啟動時提供命令行界面提示符,以及用戶在shell中有什么訪問權(quán)限
2.shell模擬選項
bsd_echo:讓echo語句跟C shell的echo命令兼容
csh_junkie_history:用不帶指定的history命令來引用前面的命令
csh_junkie_loops:允許while和for循環(huán)使用類似于C shell的end,,而不是do和done
csh_junkie_quotes:修改使用單引號和雙引號的規(guī)則來跟C shell保持一致
csh_nullcmd:在執(zhí)行沒有命令的重定向時,,不使用NULLCMD和READNULLCMD變量的值
ksh_array:使用Korn風(fēng)格的數(shù)組,采用從0開始的數(shù)字索引值,,并在引用數(shù)組元素時使用方括號
ksh_autoload:模擬Korn shell的自動加載函數(shù)功能
ksh_option_print:模擬Korn shell打印選項的方法
ksh_typeset:替換處理typeset命令參數(shù)的方式
posix_builtins:使用builtin命令來執(zhí)行內(nèi)建命令
sh_file_expansion:在執(zhí)行其他展開之前先進行文件名展開
sh_nullcmd:在進行重定向時不使用NULLCMD和READNULLCMD變量
sh_option_letters:用類似于Korn shell的方式解釋單字母命令行選項
sh_word_split:在未加引號的參數(shù)展開中執(zhí)行字段分隔
traps_async:在等待程序退出時,,處理信號并立即運行捕捉
3.初始化選項
all_export:所有的參數(shù)和變量會自動導(dǎo)出到子shell進程中
global_export:導(dǎo)出環(huán)境中的參數(shù)不會在函數(shù)中本地化
global_rcs:如果沒有設(shè)置,zsh shell不會運行全局啟動文件,,但仍然會運行本地啟動文件
rcs:如果沒有設(shè)置,,zsh shell會運行/etc/zshenv啟動文件,但不會運行其他文件
初始化選項允許指定在shell環(huán)境中運行哪些zsh shell啟動文件(如果有的話),。也可以在啟動文件中設(shè)置這些值來限定shell執(zhí)行哪些選項
4.腳本和函數(shù)選項
c_bases:用C格式(0xdddd)顯示十六進制數(shù)而不是用shell格式(16#dddd)
err_exit:如果命令以非零退出狀態(tài)碼退出,,執(zhí)行ZERR捕捉中的命令并退出
err_return:如果命令以非零退出狀態(tài)碼退出,立即從其所在函數(shù)返回
eval_lineno:如果設(shè)置了,,用eval內(nèi)建命令評估的表達式的行號會和shell環(huán)境中的其余部分分開記錄
exec:執(zhí)行命令,。如果未設(shè)置這個選項,,會讀取命令并報告錯誤,但不會執(zhí)行命令
function_argzero:將$0設(shè)置成函數(shù)名或腳本名
local_options:設(shè)置了的話,,當(dāng)shell函數(shù)返回時,,恢復(fù)所有在該函數(shù)之前設(shè)置的選項
local_traps:設(shè)置了的話,當(dāng)在函數(shù)內(nèi)設(shè)置了信號捕捉,,函數(shù)退出時恢復(fù)前一個捕捉的狀態(tài)
multios:在嘗試執(zhí)行多個重定向時,,執(zhí)行隱式tee或cat命令
octal_zeros:將任何以0開頭的整數(shù)字符串都解釋成八進制數(shù)
typeset_silent:未設(shè)置的話,使用typeset和參數(shù)名來顯示參數(shù)的當(dāng)前值
verbose:在shell讀取輸入行時顯示它們
xtrace:在shell執(zhí)行命令時顯示命令和命令的參數(shù)
內(nèi)建命令
核心內(nèi)建命令
命令 描述
alias 為命令和參數(shù)定義一個替代性名稱
autoload 將shell函數(shù)預(yù)加載到內(nèi)存中以便快速訪問
bg 以后臺模式執(zhí)行一個作業(yè)
bindkey 將組合鍵和命令綁定到一起
builtin 執(zhí)行指定的內(nèi)建命令而不是同樣名稱的可執(zhí)行文件
bye 跟exit相同
cd 切換當(dāng)前工作目錄
chdir 切換當(dāng)前工作目錄
command 將指定命令當(dāng)做外部文件執(zhí)行而不是函數(shù)或內(nèi)建命令
declare 設(shè)置變量的數(shù)據(jù)類型(同typeset)
dirs 顯示目錄棧的內(nèi)容
disabe 臨時禁用指定的哈希表元素
disown 從作業(yè)表中移出指定的作業(yè)
echo 顯示變量和文本
emulate 用zsh來模擬另一個shell,,比如Bourne,、Korn或C shell
enable 使能指定的哈希表元素
eval 在當(dāng)前shell進程中執(zhí)行指定的命令和參數(shù)
exec 執(zhí)行指定的命令和參數(shù)來替換當(dāng)前shell進程
exit 退出shell并返回指定的退出狀態(tài)碼。如果沒有指定,,使用最后一條命令的退出狀態(tài)碼
export 允許在子shell進程中使用指定的環(huán)境變量名及其值
false 返回退出狀態(tài)碼1
fc 從歷史記錄中選擇某范圍內(nèi)的命令
fg 以前臺模式執(zhí)行指定的作業(yè)
float 將指定變量設(shè)為保存浮點值的變量
functions 將指定名稱設(shè)為函數(shù)
getln 從緩沖棧中讀取下一個值并將其放到指定變量中
getopts 提取命令行參數(shù)中的下一個有效選項并將它放到指定變量中
hash 直接修改命令哈希表的內(nèi)容
history 列出歷史記錄文件中的命令
integer 將指定變量設(shè)為整數(shù)類型
jobs 列出指定作業(yè)的信息,,或分配給shell進程的所有作業(yè)
kill 向指定進程或作業(yè)發(fā)送信號(默認(rèn)為SIGTERM)
let 執(zhí)行算數(shù)運算并將結(jié)果賦給一個變量
limit 設(shè)置或顯示資源限制
local 為指定變量設(shè)置數(shù)據(jù)屬性
log 顯示受watch參數(shù)影響的當(dāng)前登錄到系統(tǒng)上的所有用戶
logout 同exit,但只在shell是登錄shell時有效
popd 從目錄棧中刪除下一項
print 顯示變量和文本
printf 用C風(fēng)格的格式字符串來顯示變量和文本
pushd 改變當(dāng)前工作目錄,,并將上一個目錄放到目錄棧中
pushln 將指定參數(shù)放到編輯緩沖棧中
pwd 顯示當(dāng)前工作目錄的完整路徑名
read 讀取一行并用IFS變量將數(shù)據(jù)字段賦給指定變量
readonly 將值賦給不能修改的變量
rehash 重建命令哈希表
set 為shell設(shè)置選項或位置參數(shù)
setopt 為shell設(shè)置選項
shift 讀取并刪除第一個位置參數(shù),,然后將剩余的參數(shù)向前移動一個位置
source 找到指定文件并將其內(nèi)容復(fù)制到當(dāng)前位置
suspend 掛起shell的執(zhí)行,直到它收到SIGCONT信號
test 如果指定條件為TRUE的話,,返回退出狀態(tài)碼0
times 顯示當(dāng)前shell以及shell中所有運行進程的累積用戶時間和系統(tǒng)時間
trap 阻斷指定信號從而讓shell無法處理,,如果收到信號則執(zhí)行指定命令
true 返回退出狀態(tài)碼0
ttyctl 鎖定和解鎖顯示
type 顯示shell會如何解釋指定的命令
typeset 設(shè)置或顯示變量的特性
ulimit 設(shè)置或顯示shell或shell中運行進程的資源限制
umask 設(shè)置或顯示創(chuàng)建文件和目錄的默認(rèn)權(quán)限
unalias 刪除指定的命令別名
unfunction 刪除指定的已定義函數(shù)
unhash 刪除哈希表中的指定命令
unlimit 刪除指定的資源限制
unset 刪除指定的變量特征
unsetopt 刪除指定的shell選項
wait 等待指定的作業(yè)或進程完成
whence 顯示指定命令會如何被shell解釋
where 顯示指定命令的路徑名,如果shell找到的話
which 用csh風(fēng)格的輸出顯示指定命令的路徑名
zcompile 編輯指定的函數(shù)或腳本從而能更快地自動加載
zmodload 對可加載zsh模塊執(zhí)行特定操作
附加模塊
模塊 描述
zsh/cap POSIX兼容性命令
zsh/clone 將運行中的shell克隆到另一個終端的命令
zsh/compctl 控制命令補全的命令
zsh/complete 命令行補全命令
zsh/complist 命令行補全列表擴展命令
zsh/computil 命令行補全的實用工具命令
zsh/datetime 額外的日期和時間命令及變量
zsh/deltochar 重現(xiàn)了emacs功能的行編輯函數(shù)
zsh/files 基本的文件處理命令
zsh/mapfile 通過關(guān)聯(lián)數(shù)組來訪問外部文件
zsh/mathfunc 額外的科學(xué)函數(shù)
zsh/parameter 通過關(guān)聯(lián)數(shù)組來訪問命令哈希表
zsh/pcre 擴展的正則表達式庫
zsh/sched 按設(shè)定時間執(zhí)行命令的計劃命令
zsh/net/socket Unix域套接字支持
zsh/stat 訪問stat系統(tǒng)調(diào)用來提供系統(tǒng)的統(tǒng)計狀況
zsh/system 訪問各種底層系統(tǒng)功能的接口
zsh/net/tcp 訪問TCP套接字
zsh/termcap termcap數(shù)據(jù)庫的接口
zsh/terminfo terminfo數(shù)據(jù)庫的接口
zsh/zftp 專用FTP客戶端命令
zsh/zle zsh行編輯器
zsh/zleparameter 用變量訪問并修改zle
zsh/zprof 允許對shell函數(shù)進行性能參數(shù)統(tǒng)計
zsh/zpty 在虛擬終端中執(zhí)行一條命令
zsh/zselect 阻斷,,直到文件描述符就緒才返回
zsh/zutil 各種shell實用工具
查看,、添加和刪除模塊
查看
執(zhí)行zmodload即可
[plain]
% zmodload
zsh/complete
zsh/computil
zsh/main
zsh/parameter
zsh/terminfo
zsh/zle
zsh/zutil
添加
zmodload +模塊名稱
可惜的是,執(zhí)行完畢之后,,不會有任何輸出來告知模塊添加完畢,,不過可以再次執(zhí)行zmodload查看
[plain]
% zmodload zsh/zftp
% zmodload
zsh/complete
zsh/computil
zsh/main
zsh/net/tcp
zsh/parameter
zsh/terminfo
zsh/zftp
zsh/zle
zsh/zutil
刪除
zmodload -u +模塊命令
[plain]
% zmodload -u zsh/zftp
注意:通常會將zmodload命令放到$HOME/.zshrc啟動文件中,這樣在zsh啟動時,,常用的函數(shù)就會自動加載
zsh腳本編程
數(shù)學(xué)運算
zsh提供兩種方法執(zhí)行數(shù)學(xué)運算:
1.let命令
2.雙圓括號
注意:實用let時,,在表達式前后加上雙引號才能支持空格
[plain]
% let a='1 + 2 * 3'
% echo $a
7
為了解決精度問題,,可以使用printf
[plain]
% ((b = 2 + 3.1/2.2))
% echo $b
3.4090909091
% printf '%6.3f\n' $b
3.409
注意:如果沒有使用typeset來聲明變量的數(shù)據(jù)類型,,那么zsh會嘗試自動分配數(shù)據(jù)類型
數(shù)學(xué)函數(shù)
安裝zsh/mathfunc即可
查看函數(shù)清單可參閱zshmodules
[plain]
% echo $((sqrt(9)))
3.
結(jié)構(gòu)化命令
if-then-else語句
for循環(huán)(包括C風(fēng)格)
while循環(huán)
until循環(huán)
select語句
case語句
上面的語句與bash使用方法完全一致,除此之外,,zsh還支持repeat結(jié)構(gòu)化命令
repeat語法格式:
[plain]
repeat param
do
commands
done
param必須是一個數(shù)字或者結(jié)果為數(shù)字的表達式
[plain]
% repeat 3
repeat> do
repeat> echo 'test'
repeat> done
test
test
test
函數(shù)
zsh shell支持使用function和圓括號定義函數(shù)名來創(chuàng)建自定義函數(shù)
使用全局變量的方法同bash shell
[plain]
#!/bin/zsh
test_add () {
printf $(($1 + $2))
}
test_add 3 7
使用方法與bash shell一致,。
[plain]
% ./zsh_test
10%
可以不將函數(shù)放在腳本中。zsh shell通過fpath環(huán)境變量查找函數(shù),,可以放到fpath下的任何目錄中,。
但是使用之前,必須執(zhí)行autoload命令(和bash shell的source命令或點命令類似吧)
zcompile會處理函數(shù)文件并為shell創(chuàng)建一個編譯后的版本,。
它會將函數(shù)編譯成二進制格式,,使zsh能夠更快的加載,。
運行zcompile命令后,它會創(chuàng)建這個函數(shù)文件的.zwc版本,。在autoload命令在fpath中查找命令時,,它會查看這個命令的.zwc版本,而不是文本版本,。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多