Bash Shell学习笔记四
1. 幾個常用命令和基本知識。
?
set $(commond)????????? 將位置參數設置為后面的命令輸出
?
shell命令中 在-- 后面的語句將會不再解釋后面的 -
?
cal 萬年歷
?
bc 計算器
?
$HISTSIZE 歷史大小
?
$RANDOM 隨機數
?
basename? pathname??? 去除路徑前綴的最后部分
?
空變量+1=1
沒有賦值或申明的變量+1=1
字符變量--->通過替換成為數字-->數字變量? 可以接受 +1操作
數字變量--->通過替換成為字符--->字符變量 不再接受 +1操作
?
使用-e 選項的echo 命令來打印轉義符
如果使用$'/X'結構,那-e 選項就不必要了
版本2 以后Bash 允許使用$'/nnn'結構,'/nnn/是8 進制
?
"[["是一個關鍵字,并不是一個命令
Bash 把[[ $a -lt $b ]]看作一個單獨的元素,并且返回一個退出碼.
2.bash shell 數組的用法
?
?
數組申明方式:空格分隔的,()包含的字符
var=(ab sc linfe)
數組引用方式
first=$var[1] 引用第二個元素
first=$var[0] 或者 first=$var 引用第一個元素
?
獲取整個數組
whole=$var[@]
echo $whole
?
獲取數組的最大長度
long=${#var[@]}
echo $long
?
數組第N個元素字符串的長度
?
long=${#var[2]} 數組第3個元素的長度
?
獲取一部分數組內容
?
part=${#var[@]:1:2}
echo $part??????????????????? 獲取從第2個元素開始 3個元素的內容
?
part=${$var[@]::2}???? 獲取從開始到第3個元素的內容
echo $part
?
part=${#var[@]:2}????? 獲取從第3個元素開始的內容
echo $part
?
數組的應用:模擬棧
push:
array=(”${array[@]}” $new_element)
pop:
array=(${array[@]:0:$((${#array[@]}-1))})
shift:
array=(${array[@]:1})
unshift
array=($new_element “${array[@]}”)
function del_array {
local i
for (( i = 0 ; i < ${#array[@]} ; i++ ))
do
if [ "$1" = "${array[$i]}" ] ;then
break
fi
done
del_array_index $i
}
function del_array_index {
array=(${array[@]:0:$1} ${array[@]:$(($1 + 1))})
}
?
3.bash中的特殊字符
?
$ 數制轉換? echo $((2#101011)) 返回101011的十進制結果
?
:內建命令,返回值為0,命令的結果返回為0表示true,什么也不做
${HOSTNAME?} 判斷HOSTNAME是否被set
() 命令組,在()中的命令列表,將作為一個子shell來運行
$? 前一個命令的退出狀態
$$ 進程的pid
$*,$@ 位置參數
${ }參數替換
$ 正則表達式中的行結束符
? 正則表達式中的單個字符
? (())結構中,用來做3元操作符
* 正則表達式中的萬能匹配
** 數學冪運算
{}? 大括號擴展 cat {file1,file2,filr3} > file?? cp file{1,2}
^ 匹配輸入字符串的開始位置。
$ 匹配輸入字符串的結束位置。
?
~+ 等同于 $PWD 當前目錄
?
~-? 等同于 $OLDPWD 上一個目錄
?
args=$#;lastarg=${!args} 參數傳遞中第一個為$1,$#表示總個數,最后一個為 $lastarg
?
[ -n $var]? var是否被定義,定義則為真 與 [ -z $var ]測試相反
?
?
4.bash shell 中有用的結構
until [ -z "$1" ]
do
echo -n "$1 "
shift
done
if grep -q file
then
echo ""
fi
case "$variable" in
abc) commond ;;
xyz) commond ;;
esac
?
5.如何在文件的第一行插入文字
?
sed -i s/^/abc/n/ file
?
6.stty命令詳解
轉自:http://hi.baidu.com/rakeliujie/blog/item/629c91907ac4be88a877a408.html
簡潔方式,顯示波特率
stty
speed 38400 baud; line = 0;
eol = M-^?; eol2 = M-^?; swtch = M-^?;
ixany iutf8
顯示全部設置的命令
stty -a
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^/; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke
重要一點
??? 屬性前面的減號表示被禁止
??? 沒有減號說明使能
上面一堆在struct termios{} 中有對應位,或者對應字符,c_cc[]內為對應字符
在include/asm-i386/termbits.h中定義這個結構及相應位
struct termios {
??? tcflag_t c_iflag;??????? /* input mode flags */
??? tcflag_t c_oflag;??????? /* output mode flags */
??? tcflag_t c_cflag;??????? /* control mode flags */
??? tcflag_t c_lflag;??????? /* local mode flags */
??? cc_t c_line;??????????? /* line discipline */
??? cc_t c_cc[NCCS];??????? /* control characters */
};
輸入模式
c_iflag包含如下標志:
/* c_iflag bits */
#define IGNBRK??? 0000001
#define BRKINT??? 0000002
#define IGNPAR??? 0000004
#define PARMRK??? 0000010
#define INPCK??? 0000020
#define ISTRIP??? 0000040
#define INLCR??? 0000100
#define IGNCR??? 0000200
#define ICRNL??? 0000400
#define IUCLC??? 0001000
#define IXON??? 0002000
#define IXANY??? 0004000
#define IXOFF??? 0010000
#define IMAXBEL??? 0020000
#define IUTF8??? 0040000
brkint???? 中斷時發出 INTR 信號。
-brkint???? 中斷時不發出 INTR 信號。
icrnl???? 輸入時將 CR 映射為 NL。
-icrnl???? 輸入時不將 CR 映射為 NL。
ignbrk???? 輸入時忽略 BREAK。
-ignbrk???? 輸入時不忽略 BREAK。
igncr???? 輸入時忽略 CR。
-igncr???? 輸入時不忽略 CR。
ignpar???? 忽略奇偶錯誤。
-ignpar???? 不忽略奇偶錯誤。
inlcr???? 輸入時將 NL 映射為 CR。
-inlcr???? 輸入時不將 NL 映射為 CR。
inpck???? 啟用奇偶校驗。
-inpck???? 禁用奇偶校驗。
istrip???? 將輸入字符剝離到 7 位。
-istrip???? 不將輸入字符剝離到 7 位。
iuclc???? 將大寫字母字符映射為小寫。
-iuclc???? 不將大寫字母字符映射為小寫。
ixany???? 允許任何字符重新啟動輸出。
-ixany???? 只允許 START(Ctrl-Q 按鍵順序)重新啟動輸出。
ixoff???? 當輸入隊列接近空或滿時,發送 START/STOP 字符。
-ixoff???? 不發送 START/STOP 字符。
ixon???????? 啟用 START/STOP 輸出控制。一旦啟用 START/STOP 輸出控制,
??????????? 您可以按下 Ctrl-S 按鍵順序暫停向工作站的輸出,也可按下 Ctrl-Q 按鍵順序恢復輸出。
-ixon???? 禁用 START/STOP 輸出控制。
imaxbel???? 當輸入溢出時,回送 BEL 字符并且廢棄最后的輸入字符。
-imaxbel 當輸入溢出時,廢棄所有輸入。
parmrk???? 標記奇偶錯誤。
-parmrk???? 不標記奇偶錯誤[1]。
輸出模式
c_oflag包含如下標志:
/* c_oflag bits */
#define OPOST??? 0000001
#define OLCUC??? 0000002
#define ONLCR??? 0000004
#define OCRNL??? 0000010
#define ONOCR??? 0000020
#define ONLRET??? 0000040
#define OFILL??? 0000100
#define OFDEL??? 0000200
#define NLDLY??? 0000400
#define?? NL0??? 0000000
#define?? NL1??? 0000400
#define CRDLY??? 0003000
#define?? CR0??? 0000000
#define?? CR1??? 0001000
#define?? CR2??? 0002000
#define?? CR3??? 0003000
#define TABDLY??? 0014000
#define?? TAB0??? 0000000
#define?? TAB1??? 0004000
#define?? TAB2??? 0010000
#define?? TAB3??? 0014000
#define?? XTABS??? 0014000
#define BSDLY??? 0020000
#define?? BS0??? 0000000
#define?? BS1??? 0020000
#define VTDLY??? 0040000
#define?? VT0??? 0000000
#define?? VT1??? 0040000
#define FFDLY??? 0100000
#define?? FF0??? 0000000
#define?? FF1??? 0100000
bs0, bs1????????????????? 為退格符選擇延遲樣式(bs0 表示沒有延遲)。
cr0, cr1, cr2, cr3???? 為 CR 字符選擇延遲樣式(cr0 表示沒有延遲)。
ff0, ff1???? 為換頁選擇延遲樣式(ff0 表示沒有延遲)。
nl0, nl1???? 為 NL 字符選擇延遲樣式(nl0 表示沒有延遲)。
ofill???? 使用延遲填充字符。
-ofill???? 使用延遲定時。
ocrnl???? 將 CR 字符映射為 NL 字符。
-ocrnl???? 不將 CR 字符映射為 NL 字符。
olcuc???? 輸出時將小寫字母字符映射為大寫。
-olcuc???? 輸出時不將小寫字母字符映射為大寫。
onlcr???? 將 NL 字符映射為 CR-NL 字符。
-onlcr???? 不將 NL 字符映射為 CR-NL 字符。
onlret???? 在終端 NL 執行 CR 功能。
-onlret???? 在終端 NL 不執行 CR 功能。
onocr???? 不在零列輸出 CR 字符。
-onocr???? 在零列輸出 CR 字符。
opost???? 處理輸出。
-opost???? 不處理輸出;即忽略所有其它輸出選項。
ofdel???? 使用 DEL 字符作為填充字符。
-ofdel???? 使用 NUL 字符作為填充字符。
tab0, tab1, tab2???? 為水平制表符選擇延遲樣式(tab0 表示沒有延遲)。
tab3???????????????????? 擴展制表符至多個空格。
vt0, vt1???????????? 為垂直制表符選擇延遲樣式(vt0 表示沒有延遲)[1]。
控制模式
/* c_cflag bit meaning */
#define CBAUD??? 0010017
#define B0??? 0000000??????? /* hang up */
#define B50??? 0000001
#define B75??? 0000002
#define B110??? 0000003
#define B134??? 0000004
#define B150??? 0000005
#define B200??? 0000006
#define B300??? 0000007
#define B600??? 0000010
#define B1200??? 0000011
#define B1800??? 0000012
#define B2400??? 0000013
#define B4800??? 0000014
#define B9600??? 0000015
#define B19200??? 0000016
#define B38400??? 0000017
#define EXTA B19200
#define EXTB B38400
#define CSIZE??? 0000060
#define?? CS5??? 0000000
#define?? CS6??? 0000020
#define?? CS7??? 0000040
#define?? CS8??? 0000060
#define CSTOPB??? 0000100
#define CREAD??? 0000200
#define PARENB??? 0000400
#define PARODD??? 0001000
#define HUPCL??? 0002000
#define CLOCAL??? 0004000
#define CBAUDEX 0010000
#define??? B57600 0010001
#define?? B115200 0010002
#define?? B230400 0010003
#define?? B460800 0010004
#define?? B500000 0010005
#define?? B576000 0010006
#define?? B921600 0010007
#define B1000000 0010010
#define B1152000 0010011
#define B1500000 0010012
#define B2000000 0010013
#define B2500000 0010014
#define B3000000 0010015
#define B3500000 0010016
#define B4000000 0010017
#define CIBAUD????? 002003600000??? /* input baud rate (not used) */
#define CMSPAR????? 010000000000??????? /* mark or space (stick) parity */
#define CRTSCTS????? 020000000000??????? /* flow control */
clocal????? 假定一行沒有調制解調器控制。
-clocal???? 假定一行帶有調制解調器控制。
cread???? 啟用接收器。
-cread???? 禁用接收器。
cstopb???? 每個字符選擇兩個停止位。
-cstopb???? 每個字符選擇一個停止位。
cs5, cs6, cs7, cs8???? 選擇字符大小。
hup, hupcl???? 最后關閉時掛起撥號連接。
-hup, -hupcl???? 最后關閉時不掛起撥號連接。
parenb???? 啟用奇偶性校驗的生成和檢測。
-parenb???? 禁用奇偶性校驗的生成和檢測。
parodd???? 選擇奇校驗。
-parodd???? 選擇偶校驗。
0???? 立即掛起電話線路。
speed???? 將工作站輸入和輸出速度設置為指定的 speed 數(以位/秒為單位)。
??????????? 并不是所有的硬件接口都支持所有的速度。
??????????? speed 的可能值有:50、75、110、134、200、300、600、1200、1800、
??????????? 2400、4800、9600、19200、19.2、38400、38.4、exta 和 extb。
注:
exta、19200 和 19.2 是同義詞;extb、38400 和 38.4 是同義詞。
ispeed speed???? 將工作站輸入速度設置為指定的 speed 數(以位/秒為單位)。
??????????????????? 并不是所有的硬件接口都支持所有的速度,而且并不是所有的硬件接口都支持該選項。
??????????????????? speed 的可能值與 speed 選項相同。
ospeed speed???? 將工作站輸出速度設置為指定的 speed 數(以位/秒為單位)。
??????????????????? 并不是所有的硬件接口都支持所有的速度,而且并不是所有的硬件接口都支持該選項。
??????????????????? speed 的可能值與 speed 選項相同[1]。
本地模式
/* c_lflag bits */
#define ISIG??? 0000001
#define ICANON??? 0000002
#define XCASE??? 0000004
#define ECHO??? 0000010
#define ECHOE??? 0000020
#define ECHOK??? 0000040
#define ECHONL??? 0000100
#define NOFLSH??? 0000200
#define TOSTOP??? 0000400
#define ECHOCTL??? 0001000
#define ECHOPRT??? 0002000
#define ECHOKE??? 0004000
#define FLUSHO??? 0010000
#define PENDIN??? 0040000
#define IEXTEN??? 0100000
echo????? 回送每個輸入的字符。
-echo???? 不回送字符。
echoctl???? 以 ^X(Ctrl-X)回送控制字符,X 是將 100 八進制加到控制字符代碼中給出的字符。
-echoctl???? 不以 ^X(Ctrl-X)回送控制字符。
echoe???? 以“backspace space backspace”字符串回送 ERASE 字符。
注:
該模式不保持對列位置的跟蹤,因此您可能在擦除制表符和轉義序列等符號時得到意外的結果。
-echoe???? 不回送 ERASE 字符,只回送退格符。
echok???? 在 KILL 字符后回送 NL 字符。
-echok???? 在 KILL 字符后不回送 NL 字符。
echoke???? 通過擦除輸出行上的每個字符,回送 KILL 字符。
-echoke???? 只回送 KILL 字符。
echonl???? 回送 NL 字符。
-echonl???? 不回送 NL 字符。
echoprt???? 以 /(斜杠)和 / (反斜杠) 向后回送擦除的字符。
-echoprt???? 不以 /(斜杠)和 / (反斜杠) 向后回送擦除的字符。
icanon???? 啟用規范輸入(規范輸入允許使用 ERASE 和 KILL 字符進行輸入行的編輯)。
??????????? 請參閱 AIX 5L Version 5.2 Communications Programming Concepts 中的
???????????? Line Discipline Module (ldterm) 中關于 canonical mode input 的討論。
-icanon???? 禁用規范輸入。
iexten???? 指定從輸入數據中識別實現性定義的功能。
??????????? 要識別以下控制字符,
??????????? 需要設置 iexten:eol2、dsusp、reprint、discard、werase、lnext。
??????????? 與這些模式關聯的功能也需要設置 iexten:imaxbel、echoke、echoprt、echoctl。
-iexten???? 指定從輸入數據中識別實現性定義的功能。
isig???????? 啟用對特殊控制字符(INTR、SUSP 和 QUIT 特殊控制字符)的字符檢查。
-isig???? 禁用對特殊控制字符(INTR、SUSP 和 QUIT 特殊控制字符)的字符檢查。
noflsh???? 不清除 INTR、SUSP 或 QUIT 控制字符之后的緩沖區。
-noflsh???? 清除 INTR、SUSP 或 QUIT 控制字符之后的緩沖區。
pending???? 下次讀操作暫掛或輸入到達時,要重新輸入從原始模式轉換為規范模式后被暫掛的輸入。
??????????? 暫掛是一個內部狀態位。
-pending???? 沒有文本暫掛。
tostop???? 為背景輸出發出 SIGTOU 信號。
-tostop???? 不為背景輸出發出 SIGTOU 信號。
xcase???? 在輸入中回送大寫字符,并在輸出顯示的大寫字符之前加上 / (反斜杠)。
-xcase???? 不在輸入時回送大寫字符[1]。
控制字符
/* c_cc characters */
#define VINTR 0
#define VQUIT 1
#define VERASE 2
#define VKILL 3
#define VEOF 4
#define VTIME 5
#define VMIN 6
#define VSWTC 7
#define VSTART 8
#define VSTOP 9
#define VSUSP 10
#define VEOL 11
#define VREPRINT 12
#define VDISCARD 13
#define VWERASE 14
#define VLNEXT 15
#define VEOL2 16
控制指定
要將一個控制字符指定到某字符串中,請輸入:
stty Control String
其中,Control 參數可以是 INTR、QUIT、ERASE、KILL、EOF、EOL、EOL2、START、STOP、
SUSP、DSUSP、REPRINT、DISCARD、WERASE、
LNEXT、MIN 或 TIME 參數。(使用字符 MIN 和 TIME 時,請加上 -icanon 選項。)[1]
試驗
打印出終端的行數和列數
stty size
24 80
即24行,80列
stty cols 25
把列設為25行,發現輸出變窄
stty -a
speed 38400 baud;
rows 24; columns 25;
line = 0;
intr = ^C; quit = ^/;
erase = ^?; kill = ^U;
eof = ^D; eol = <undef>;
eol2 = <undef>;
swtch = <undef>;
start = ^Q; stop = ^S;
susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V;
flush = ^O;
min = 1; time = 0;
-parenb -parodd cs8 hupcl
-cstopb cread -clocal
-crtscts
-ignbrk brkint ignpar
-parmrk -inpck istrip
-inlcr -igncr icrnl ixon
-ixoff -iuclc -ixany
imaxbel -iutf8
opost -olcuc -ocrnl onlcr
-onocr -onlret -ofill
-ofdel nl0 cr0 tab0 bs0
vt0 ff0
isig icanon iexten echo
echoe echok -echonl
-noflsh -xcase -tostop
-echoprt echoctl echoke
stty speed
顯示速率
stty intr c
c變為中斷鍵,想輸入c不可能了。
stty raw
發現ctrl+c不管用了,輸出混亂
允許原始模式輸入(不包括輸入處理,例如 erase、kill 或 interrupt);傳回奇偶(校驗)位。
stty -raw
允許規范輸入方式。
在命令行下,禁止輸出大寫的方法
stty iuclc #開啟
stty -iuclc #恢復
在命令行下禁止輸出小寫
stty olcuc #開啟
stty -olcuc#恢復
stty sane
將參數重新設置為合理的值。
忽略回車符
stty igncr #開啟
發現enter不起作用了,要顯示執行效果,需用ctrl+j
stty -igncr#恢復,要顯示執行效果,需用ctrl+j
stty erase x
退格刪除鍵變成x,想輸入x,不可能了,因為x是退格鍵
stty erase ^?返回原來退格鍵
stty -echo
發現按鍵,什么也沒有出現
stty echo
輸入顯示
stty -icanon
關閉驅動程序中的規范模式處理,跳過緩沖層,用戶不能刪除字符,
測試一下
gui.c
#include<stdio.h>
main()
{
??? char c;
??? FILE *fp_tty;
??? fp_tty=fopen("/dev/tty","r");
??? if(fp_tty==NULL)
??????? exit(1);
??? while((c=getc(fp_tty))!=EOF)
??? {
??????? printf("%d",c);
??? }
}
gcc gui.c -o gui
stty icanon
./gui
d
10010f
10210d
10010f
10210
可以用退格鍵,并且顯示數字還得按回車鍵, 從10( enter)就可以看出來
stty -icanon
./gui
d100f102g103h104
10
?
7.如何用sed直接替換文本而不重新生成文件
?
命令
sed -i 's/pattern/replacement-string/ file
?
?
8.如何判斷變量不是空格的方法
?
命令
?
if [[ "a" != "a"$i ]]
then
?????? echo "not space"
else
?????? echo "space"
fi
?
9. ${ } 用法
${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。 (非空值時不作處理)
tips:
以上的理解在于, 你一定要分清楚 unset 與 null 及 non-null 這3種賦值狀態.
一般而言, : 與 null 有關, 若不帶 : 的話, null 不受影響, 若帶 : 則連null 也受影響.
還有哦,${#var} 可計算出變量值的長度:
${#file} 可得到 27 ,因為/dir1/dir2/dir3/my.file.txt 剛好是 27 個字節...
?
10. bash: case 中的 shift 語句是什么意思?
轉自:http://bbs.chinaunix.net/viewthread.php?tid=218643
這牽扯到 script 或 function 的 positional parameter 。
$0 代表 script 本身(function 的 $0 也是 script)
其後的字串以 IFS 分隔,分別從 $1, $2 ...??起...
$@ 或 $* 則是 $1 到最後一個 positional parameter 。
shift 是"參數向左移動",但不好理解...??
我將之說成:shift 就是"砍掉" $@/$* 最左邊的 parameter 。
shift n 則是砍掉 n 個...
比方說,要取得第 10 個 parameter ,可以:
echo ${10}
也可以:
shift 9; echo $1
總結
以上是生活随笔為你收集整理的Bash Shell学习笔记四的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《速度与激情10》预告片即将发布 网友:
- 下一篇: Advanced Bash-Script