国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Linux > 正文

shell中的各種括號的使用方法

2019-10-26 18:44:42
字體:
供稿:網(wǎng)友

在這里我想說的是幾種shell里的小括號,大括號結構和有括號的變量,命令的用法,如下:

1.${var}
2.$(cmd)
3.()和{}
4.${var:-string},${var:+string},${var:=string},${var:?string}
5.$((exp))
6.$(var%pattern),$(var%%pattern),$(var#pattern),$(var##pattern)

現(xiàn)在分述如下:


1.Shell中變量的原形:${var}
大家常見的變量形式都是$var,如

$ var=test
$ echo $var
test

但當你要顯示變量值加隨意的字符(我這里用AA)時,就會出錯,如下:

$ echo $varAA

$

這時應該用變量的原形:${var},即是加一個大括號來限定變量名稱的范圍,如下
$ echo ${var}AA
testAA
$

以這個特性,我們可以很方便地寫一個批量改后綴名的程序,我把它命名為mymv,程序如下:
#!/bin/bash

tail=$1
for filename in `ls`
do
mv $filename ${filename}.$tail
done

程序需要提供一個后綴名,如c,表示改為后綴為c的C程序文件,看下面的測試:
$ ls
a b c
$ mymv c
$ ls
a.c b.c c.c
$

看樣子程序運行的很好,但這是不完善的程序,有2個要注意的問題:
A,目錄下沒有子目錄,如果有一個目錄,假設為dir,則也會被改為dir.c,這顯然不是我們想要的,應該修正這個程序能識別目錄。
B,沒有幫助對程序的參數(shù)進行處理,程序應該足夠友好,在用戶沒有給定后綴名時應能處理,像上面的將直接給文件加上了一個點(.),這顯然也不是我們想要的。

因為我們的目的是說明${var},這樣已經(jīng)足夠了,因此這里不會再對上面的程序進行修正。

2.命令替換$(cmd)
命令替換$(cmd)和符號`cmd`(注意這不是單引號,在美式鍵盤上,`是ESC下面的那個鍵)有相同之處
$ ls
a b c
$ echo $(ls)
a b c
$ echo `ls`
a b c

我們來分析一下命令echo $(ls),以便理解所謂命令替換是什么意思:
shell掃描一遍命令行,發(fā)現(xiàn)了$(cmd)結構,便將$(cmd)中的cmd執(zhí)行一次,得到其標準輸出,再將此輸出放到原來命令echo $(ls)中的$(ls)位置,即替換了$(ls),再執(zhí)行echo命令。
如下:
echo $(ls)被替換成了echo a b c
這里要注意的是$(cmd)中的命令的錯誤輸出是不會被替換的,替換的只是標準輸出:
$ var=$(cat d) ###文件d在當前目錄不存在
cat: d: 沒有那個文件或目錄
$ echo $var

$ ###顯然var變量的值是空的

3、一串的命令執(zhí)行()和{}
()和{}都是對一串的命令進行執(zhí)行,但有所區(qū)別:
A,()只是對一串命令重新開一個子shell進行執(zhí)行
B,{}對一串命令在當前shell執(zhí)行
C,()和{}都是把一串的命令放在括號里面,并且命令之間用;號隔開

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 象州县| 新巴尔虎左旗| 乐亭县| 烟台市| 高雄县| 黔南| 台东县| 普兰县| 湖北省| 卓尼县| 健康| 屏南县| 农安县| 固阳县| 奉节县| 广汉市| 宜宾县| 潮州市| 华阴市| 喜德县| 罗田县| 临沂市| 榆中县| 和龙市| 商南县| 靖远县| 凉城县| 图们市| 明光市| 毕节市| 洛南县| 台山市| 津市市| 巴南区| 安徽省| 外汇| 灵宝市| 仁布县| 河津市| 凤凰县| 巴中市|