在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Linux/ shell 學(xué)習(xí)三十六天----命令替換
shell 學(xué)習(xí)四十一天----列出文件 ls 和 od 命令
shell 學(xué)習(xí)小結(jié)
shell 學(xué)習(xí)第二十八天----case 語句
shell 學(xué)習(xí)四十四天----尋找文件
shell 學(xué)習(xí)三十五天----波浪號(hào)展開與通配符
shell 學(xué)習(xí)三十八天----執(zhí)行順序和 eval
shell 學(xué)習(xí)四十八天----文件校驗(yàn)和匹配
shell 學(xué)習(xí)四十天----awk 的驚人表現(xiàn)
shell 學(xué)習(xí)第十一天----sed 正則的精確控制
shell 學(xué)習(xí)第十七天----awk 命令
shell 學(xué)習(xí)三十九天----內(nèi)建命令
shell 學(xué)習(xí)四十五天----xargs
shell 學(xué)習(xí)三十七天----引用
shell 學(xué)習(xí)第十六天----join 練習(xí)
shell 學(xué)習(xí)第二十四天----提取開頭或結(jié)尾數(shù)行
shell 學(xué)習(xí)第九天----分組
shell 學(xué)習(xí)第五天----基本的 I/O 重定向
shell 學(xué)習(xí)第十五天----使用 cut 選定字段
shell 學(xué)習(xí)四十六天----文件系統(tǒng)的空間信息 df 和 du 命令
shell 學(xué)習(xí)第八天----擴(kuò)展正則表達(dá)式 (ERE)
shell 學(xué)習(xí)第十九天----文本塊排序
shell 學(xué)習(xí)第二十一天----重新格式化段落
shell 學(xué)習(xí)三十六天----命令替換
shell 學(xué)習(xí)第二十天----sort 的其他內(nèi)容以及 uniq 命令
shell 學(xué)習(xí)四十二天----使用 touch 更新文件時(shí)間
shell 學(xué)習(xí)五十一天----top 命令查看進(jìn)程列表
shell 學(xué)習(xí)第一天
shell 學(xué)習(xí)五十四天----進(jìn)程系統(tǒng)調(diào)用的追蹤 strace
shell 學(xué)習(xí)五十天----查看進(jìn)程 ps 命令
shell 學(xué)習(xí)第二十七天----退出狀態(tài)和 if 語句
shell 學(xué)習(xí)第二十三天----打印
shell 學(xué)習(xí)三十三天----關(guān)于重定向
shell 學(xué)習(xí)四十九天----進(jìn)程建立
shell 學(xué)習(xí)第三十天----break,continue,shift,getopts
shell 學(xué)習(xí)五十五天----進(jìn)程記賬
shell 學(xué)習(xí)總結(jié)一
shell 學(xué)習(xí)第二十六天----變量與算數(shù)
shell 學(xué)習(xí)第二十二天----計(jì)算行數(shù), 字?jǐn)?shù)以及字符數(shù)
shell 學(xué)習(xí)五十八天----/proc 文件系統(tǒng)
shell 學(xué)習(xí)第二十五天----神器的管道符
shell 學(xué)習(xí)第三十二天----read 讀取一行
sheel 學(xué)習(xí)第三天
shell 學(xué)習(xí)----小結(jié)
shell 學(xué)習(xí)第十八天----文本排序
shell 學(xué)習(xí)第三十一天----函數(shù)問題
shell 學(xué)習(xí)第十天----sed 查找與替換
shell 學(xué)習(xí)四十三天----臨時(shí)性文件的建立與使用
shell 學(xué)習(xí)四十七天----文件比較 cmp,diff,patch
shell 學(xué)習(xí)三十四天----printf 詳解
shell 學(xué)習(xí)五十七天 ----linux 任務(wù)管理,針對(duì)上一講的總結(jié)和擴(kuò)展
shell 學(xué)習(xí)第六天----小結(jié)
shell 學(xué)習(xí)第十三天----sed 案例分析
shell 學(xué)習(xí)第七天----基礎(chǔ)正則表達(dá)式 (BRE)
shell 學(xué)習(xí)第十二天----行與字符串
shell 學(xué)習(xí)小結(jié)四
shell 學(xué)習(xí)第二十九天----循環(huán)
shell 學(xué)習(xí)五十二天----刪除進(jìn)程 kill 命令
shell 學(xué)習(xí)五十六天----延遲進(jìn)程調(diào)度
shell 學(xué)習(xí)第四天----華麗的 printf 輸出
shell 學(xué)習(xí)第十五天----join 連接字段
shell 學(xué)習(xí)完結(jié)篇----希望你能看到
shell 學(xué)習(xí)第二天
shell 學(xué)習(xí)五十三天----捕獲信號(hào) trap

shell 學(xué)習(xí)三十六天----命令替換

命令替換

命令替換是指 shell 可以先執(zhí)行命令,將輸出結(jié)果暫時(shí)保存,在適當(dāng)?shù)牡胤捷敵觥?/p>

命令替換的語法:

command

注意這是反引號(hào),而不是單引號(hào),這個(gè)鍵位于 ESC 鍵的下方。

案例:

\#!/bin/bash
DATE=`date`
echo "Date is $DATE"
 \
USERS=`who | wc -l`
echo "Logged in user are $USERS"
UP=`date ;uptime`
echo "Uptime is $UP"

執(zhí)行結(jié)果:

Date is 2015 年 07 月 04 日 星期六 10:54:22 CST
Logged in user are 1
Uptime is 2015 年 07 月 04 日 星期六 10:54:22 CST
10:54:22 up  1:22, 1 user, load average:0.00,0.00,0.00

head 命令使用 sed

使用 sed 的 head 命令來顯示文件的前 n 行。真實(shí)的 head 命令可加上選項(xiàng),以指定要顯示多少行。例如 head -n 10 /etc/passwd。

使用命令替換與 sed,使其與原始的 head 版本的工作方式相同:

\#!/bin/bash
count=$(echo $1 | sed's/^-//')     #截去前置的負(fù)號(hào)
shift                         #移除 $1
sed ${count}q "$@"

當(dāng)調(diào)用這個(gè)腳本時(shí),使用命令./head.sh -10 /etc/passwd 調(diào)用這個(gè)腳本時(shí),sed 最終是以 sed 10q /etc/passwd 被引用。

案例:發(fā)一封郵件信息給當(dāng)前已登錄的所有用戶:

mail $(who | cut -d'    '-f1)

使用 who 命令獲得當(dāng)前在線用戶,使用 cut 獲得用戶的名稱,把括號(hào)內(nèi)命令生成的結(jié)果先執(zhí)行,然后作為 mail 參數(shù)。

回顧一下 cut 命令

語法:cut 選項(xiàng) 參數(shù)

主要是用來從一個(gè)文本文件或者文本流中提取文本列。

主要選項(xiàng):

  • -b,-c,-f 分別表示字節(jié),字符,字段 (即 byte,character,field)
  • -d:使用指定分界符代替制表符作為區(qū)域分界
  • -f:只選中指定的這些域;并打印所有不包含分界符的行,除非 -s 選項(xiàng)被指定。
  • -s:不打印沒有分界符的行
  • --output-delimiter= 字符串 // 使用指定的字符串作為輸出分界符,默認(rèn)采用輸入的分界符。

簡(jiǎn)易教學(xué):expr

expr 命令是一個(gè)手工命令行計(jì)數(shù)器,用于在 UNIX/LINUX 下求表達(dá)式變量的值,一般用于整數(shù)值,也可用于字符串。

  • 格式為:expr Expression(命令讀入 Expression 參數(shù),計(jì)算它的值,然后將結(jié)果寫入到標(biāo)準(zhǔn)輸出)
  • 參數(shù)應(yīng)用規(guī)則:
    • 用空格隔開每個(gè)項(xiàng);
    • 用 / (反斜杠) 放在 shell 特定的字符前面;
    • 對(duì)包含空格和其他特殊字符的字符串要用引號(hào)括起來

expr 主要用于 shell 的算術(shù)運(yùn)算。expr 的語法很麻煩:運(yùn)算數(shù)與運(yùn)算符必須是單個(gè)的命令行參數(shù);因此建議在這里大量使用空格間隔它們。很多 expr 的運(yùn)算符同時(shí)也是 shell 的 meta 字符,所以必須謹(jǐn)慎使用引號(hào)。

expr 被設(shè)置用在命令替換之內(nèi)。這樣,它會(huì)通過打印的方式把值返回到標(biāo)準(zhǔn)輸出,而非通過使用退出碼 (也就是 shell 內(nèi)的 $?)。

expr 運(yùn)算符 (優(yōu)先級(jí)由小至大)

表達(dá)式
意義
e1 | e2
如果 e1 是非零值或非 null,則使用它的值。否則如果 e2 是非零值或非 null,則使用它的值。如果兩者都不是,則最后值為零
e1&e2
如果 e1 與 e2 都非零值或非 null,則返回 e1 的值。否則,最后值為零
e1=e2
等于
e1!=e2
不等于
e1<e2
小于
e1<=e2
小于或等于
e1>e2
大于
e1>=e2
大于或等于

以上這些運(yùn)算符,如果指示的比較為真,則會(huì)使得 expr 顯示 1,否則顯示 0。如果兩個(gè)運(yùn)算符都為整數(shù),則以數(shù)字方式比較;如果不是,則以字符串方式比較

e1+e2
e1 與 e2 的加和
e1-e2
e1 與 e2 的相減
e1*e2
e1 與 e2 的相乘
e1/e2
e1 除以 e2 的整數(shù)結(jié)果 (取整)
e1%e2
e1 除以 e2 的整數(shù)結(jié)果 (取余)
e1:e2
e1 與 e2 的 BRE 匹配
  • integer 一個(gè)只包含數(shù)字的數(shù)目,允許前置負(fù)號(hào),但卻不支持一元的正號(hào)
  • string 字符串值,不允許被誤用為數(shù)字或運(yùn)算符

在新的代碼里,可以使用 test$((...)) 進(jìn)行這里所有運(yùn)算。正則表達(dá)式的匹配與提取,也可搭配 sed 或是 shell 的 case 語句來完成。

案例一:計(jì)算字符串長(zhǎng)度
expr length "this is a test"
輸出:14

案例二:抓取字串
expr substr "this is a test"
輸出:is is

案例三:抓取第一個(gè)字符數(shù)字串出現(xiàn)的位置
expr index "qweasdzxcasdqwe" a
輸出:4

案例四:整數(shù)運(yùn)算
expr 14 % 9(空格隔開)
輸出:5
其他運(yùn)算符相同

案例五:增量計(jì)算

test=0  
test=`expr $LOOP + 1`(這里的是反引號(hào),ESC 下面的那個(gè)鍵)  

案例六:數(shù)值測(cè)試
說明:用 expr 測(cè)試一個(gè)數(shù)。如果試圖計(jì)算非整數(shù),則會(huì)返回錯(cuò)誤。

rr=3.4
expr $rr + 1
expr:non-numeric argument
rr=5
expr $rr + 1
6

案例七:

$ a=2
$ b=3
$ c=`expr $a + $b`//` 是 Tab 上面的那個(gè)按鍵,意思在這行里面
兩個(gè) `` 之間的命令最先執(zhí)行
$ echo $c
你還可以用這種方面來計(jì)算:
$ a=2
$ b=3
$ c=$(($a+$b))
$ echo $c
解釋一下:$((里面能進(jìn)行運(yùn)算))

更詳細(xì)的參考:

http://blog.csdn.net/guhong5153/article/details/6542995

案例:

\#!/bin/bash
i=1
while ["$i" -le 5]
do
        echo i is $i
        i=`expr $i + 1`
done
echo $i

輸出:

i is 1
i is 2
i is 3
i is 4
i is 5
6

這類的算術(shù)運(yùn)算,已經(jīng)給出了可能遇到的 expr 的使用方式 99%。故意在這里使用 test(別名用法為 [...]) 以及反引號(hào)的命令替換,因?yàn)檫@是 expr 的傳統(tǒng)用法。

在新的代碼里,使用 shell 的內(nèi)建算術(shù)替換應(yīng)該會(huì)更好:

\#!/bin/bash
i=1
while ["$i" -le 5]
do
        echo i is $i
        i=$(($i+1))
done
echo $i

無論 expr 的價(jià)值如何,它支持 32 位的算術(shù)運(yùn)算,也支持 64 位的算術(shù)運(yùn)算----在很多系統(tǒng)上都可以,因此,幾乎不會(huì)有計(jì)數(shù)器溢出的問題。