都是未记载在笔记本上的东西
關於 echo 命令所支援的反斜線控制字符如下表:
\a:ALERT / BELL (從系統喇叭送出鈴聲)
\b:BACKSPACE ,也就是向左退格鍵
\c:取消行末之換行符號
\E:ESCAPE,跳脫鍵
\f:FORMFEED,換頁字符
\n:NEWLINE,換行字符
\r:RETURN,回車鍵
\t:TAB,表格跳位鍵
\v:VERTICAL TAB,垂直表格跳位鍵
\n:ASCII 八進位編碼(以 x 開首為十六進位)
\\:反斜線本身
例二:
$ echo -e "\141\011\142\011\143\012\144\011\145\011\146"
a b c
d e f
與例一的結果一樣,只是使用 ASCII 八進位編碼
例三:
$ echo -e "\x61\x09\x62\x09\x63\x0a\x64\x09\x65\x09\x66"
a b c
d e f
與例二差不多,只是這次換用 ASCII 十六進位編碼。
例四:
$ echo -ne "a\tb\tc\nd\te\bf\a"
a b c
d f $
因為 e 字母後面是退格鍵(\b),因此輸出結果就沒有 e 了。
在結束時聽到一聲鈴嚮,那是 \a 的傑作﹗
由於同時使用了 -n 選項,因此 shell prompt 緊接在第二行之後。
若你不用 -n 的話,那你在 \a 後再加個 \c ,也是同樣的效果。
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO12.23
除了 IFS 與 CR ,常用的 meta 還有:
= : 設定變量。
$ : 作變量或運算替換(請不要與 shell prompt 搞混了)。
> :重導向 stdout。
< :重導向 stdin。
|:命令管線。
& :重導向 file descriptor ,或將命令置於背境執行。
( ):將其內的命令置於 nested subshell 執行,或用於運算或命令替換。
{ }:將其內的命令置於 non-named function 中執行,或用在變量替換的界定範圍。
; :在前一個命令結束時,而忽略其返回值,繼續執行下一個命令。
&& :在前一個命令結束時,若返回值為 true,繼續執行下一個命令。
|| :在前一個命令結束時,若返回值為 false,繼續執行下一個命令。
!:執行 history 列表中的命令
....
$ A='B
> C
> '
$ echo "$A"
B
C
在上例中,由於 被置於 hard quote 當中,因此不再作為 CR 字符來處理。
這裡的 單純只是一個斷行符號(new-line)而已,由於 command line 並沒得到 CR 字符,
因此進入第二個 shell prompt (PS2,以 > 符號表示),command line 並不會結束,
直到第三行,我們輸入的 並不在 hard quote 裡面,因此並沒被關閉,
此時,command line 碰到 CR 字符,於是結束、交給 shell 來處理。
$ A="B
> C
> "
$ echo $A
B C
然而,由於 echo $A 時的變量沒至於 soft quote 中,因此當變量替換完成後並作命令行重組時, 會被解釋為 IFS ,而不是解釋為 New Line 字符。
"$A" 和 $A 没理解··关于会被解释为IFS,而不是解释为NewLine字符 没理解····
应该是不了解$含义的原因··· 先放一边!!!!???????????????????
您或許發現光是一個 鍵所產生的字符就有可能是如下這些可能:
CR
IFS
NL(New Line)
FF(Form Feed)
NULL
...
至於甚麼時候會解釋為甚麼字符,這個我就沒去深挖了,或是留給讀者諸君自行慢慢摸索了... ^_^
區分出 shell meta 與 command meta :这个不懂,Google了一下,还得看awk和sed后再来理解··· 先放一边··回头来学!!!!??????????????????????
(提示:關於 ${name} 事實上還可做到更多的變量處理能力,這些均屬於比較進階的變量處理,
現階段暫時不介紹了,請大家自行參考資料。如 CU 的貼子:
) 这个还没去看~mark
????????????????????????
$ str= # 設為 null
$ var=${str=expr} # 定義 var
$ echo $var
$ echo $str
$ unset str # 取消
$ var=${str=expr} # 定義 var
$ echo $var
expr
$ echo $str
expr
聰明的讀者(yes, you!),稍加思考的話,
應該不難發現為何同樣的 var=${str=expr} 在 null 與 unset 之下的不同吧?
##############不了解 var=${str=expr} #############
郁闷啊,不是{}里面的都是变量名吗~~~还是expr这个值把原来的空值给覆盖了啊??
抓狂啊啊啊~~~~~~~??????????????????????????????????????????
===========================================================================
最後比教一下 ${str=expr} 與 ${str:=expr} :
* 兩者在 not set 與 not null 都一至
* 但當 null 值時,前者會將 $var 與 $str 都設為 null ,但後者則設為 expr
======================================================================待解决
今天看到第六问···明天晚上继续~~~~~回去咯
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO12.24
任意的script,只要加上'路径名'和'script的名字',前面再加个source,那个script里的命令就能在当前shell进程运行!!这样,写的一个script就可以供其他的script使用了~ 呵呵,不晓得这样理解正确不正确
================================================
假設我們定義了一個變量為:
file=/dir1/dir2/dir3/my.file.txt
我們可以用 ${ } 分別替換獲得不同的值:
${file#*/}:拿掉第一條 / 及其左邊的字串:dir1/dir2/dir3/my.file.txt
${file##*/}:拿掉最後一條 / 及其左邊的字串:my.file.txt
${file#*.}:拿掉第一個 . 及其左邊的字串:file.txt
${file##*.}:拿掉最後一個 . 及其左邊的字串:txt
${file%/*}:拿掉最後條 / 及其右邊的字串:/dir1/dir2/dir3
${file%%/*}:拿掉第一條 / 及其右邊的字串:(空值)
${file%.*}:拿掉最後一個 . 及其右邊的字串:/dir1/dir2/dir3/my.file
${file%%.*}:拿掉第一個 . 及其右邊的字串:/dir1/dir2/dir3/my
記憶的方法為:
# 是去掉左邊(在鑑盤上 # 在 $ 之左邊) 掐头
% 是去掉右邊(在鑑盤上 % 在 $ 之右邊) 掐尾
單一符號是最小匹配﹔兩個符號是最大匹配。
===================================================
${file:0:5}:提取最左邊的 5 個字節:/dir1
${file:5:5}:提取第 5 個字節右邊的連續 5 個字節:/dir2
我們也可以對變量值裡的字串作替換:
${file/dir/path}:將第一個 dir 提換為 path:/path1/dir2/dir3/my.file.txt
${file//dir/path}:將全部 dir 提換為 path:/path1/path2/path3/my.file.txt
利用 ${ } 還可針對不同的變數狀態賦值(沒設定、空值、非空值):
${file-my.file.txt} :假如 $file 沒有設定,則使用 my.file.txt 作傳回值。(空值及非空值時不作處理)
${file:-my.file.txt} :假如 $file 沒有設定或為空值,則使用 my.file.txt 作傳回值。 (非空值時不作處理)
${file+my.file.txt} :假如 $file 設為空值或非空值,均使用 my.file.txt 作傳回值。(沒設定時不作處理)
${file:+my.file.txt} :若 $file 為非空值,則使用 my.file.txt 作傳回值。 (沒設定及空值時不作處理)
${file=my.file.txt} :若 $file 沒設定,則使用 my.file.txt 作傳回值,同時將 $file 賦值為 my.file.txt 。 (空值及非空值時不作處理)
${file:=my.file.txt} :若 $file 沒設定或為空值,則使用 my.file.txt 作傳回值,同時將 $file 賦值為 my.file.txt 。 (非空值時不作處理)
${file?my.file.txt} :若 $file 沒設定,則將 my.file.txt 輸出至 STDERR。 (空值及非空值時不作處理)
${file:?my.file.txt} :若 $file 沒設定或為空值,則將 my.file.txt 輸出至 STDERR。 (非空值時不作處理)
一般而言, : 與 null 有關, 若不帶 : 的話, null 不受影響, 若帶 : 則連 null 也受影響.
還有哦,${#var} 可計算出變量值的長度:
${#file} 可得到 27 ,因為 /dir1/dir2/dir3/my.file.txt 剛好是 27 個字節...
XOR异或 相同得0 不同得1
??????????????????????????????????????????????????????????????????????
假如當前的 umask 是 022 ,那麼新建文件的權限即為:
$ umask 022
$ echo "obase=8;$(( 8#666 & (8#777 ^ 8#$(umask)) ))" | bc
644
??????????????????????????????????????????
参考这篇文章
常見的用於 (( )) 的測試符號有如下這些:
<:小於
>:大於
<=:小於或等於
>=:大於或等於
==:等於
!=:不等於
88888888888888888888888888888888888888888888888888888888888888809.12.24
开始于第九问
======================================================
my.sh script
#!/bin/bash
my_fun() {
echo '$0 inside function is '$0
echo '$1 inside function is '$1
echo '$2 inside function is '$2
}
echo '$0 outside function is '$0
echo '$1 outside function is '$1
echo '$2 outside function is '$2
my_fun fp1 "fp2 fp3"
然後在 command line 中跑一下 script 就知道了:
chmod +x my.sh
./my.sh p1 "p2 p3"
$0 outside function is ./my.sh
$1 outside function is p1
$2 outside function is p2 p3
$0 inside function is ./my.sh
$1 inside function is fp1
$2 inside function is fp2 fp3
====================================看看,时常复习复习,加强印象
test 的表示式我們稱為 expression ,其命令格式有兩種:
test expression
or:
[ expression ]
(請務必注意 [ ] 之間的空白鍵﹗)
bash 的 test 目前支援的測試對像只有三種:
* string:字串,也就是純文字。
* integer:整數( 0 或正整數,不含負數或小數點)。
* file:文件。
$ A=123
$ [ -n "$A" ] && echo "yes! it's ture."
yes! it's ture.
$ unset A
$ [ -n "$A" ] && echo "yes! it's ture."
$ [ -n "$A" ] || echo "no, it's NOT ture."
no, it's NOT ture.
用多個 && 或 || 來組建呢:
$ A=123
$ [ -n "$A" ] && echo "yes! it's ture." || echo "no, it's NOT ture."
yes! it's ture.
$ unset A
$ [ -n "$A" ] && echo "yes! it's ture." || echo "no, it's NOT ture."
no, it's NOT ture.
怎樣,從這一刻開始,你是否覺得我們的 shell 是"很聰明"的呢
==================================================
$ ls my.file no.such.file 1>file.both 2>&1
或
$ ls my.file no.such.file 2>file.both >&2
看到11问的11.4
88888888888888888888888888888888888888888888888+09.12.31
大汗,12问没彻底看懂·······
與 break 相同的是:continue 後面也可指定一個數值 n ,以決定繼續哪一層(從裡向外計算)的循環,
預設值為 continue 1 ,也就是繼續當前的循環。
13问结束了!
在09年的最后一天
阅读(296) | 评论(0) | 转发(0) |