shell執(zhí)行
#!/bin/bash ? ?#shebang指定解釋器
執(zhí)行方式
lang@liang:~/linux/shell$ chmod u+x test.sh
lang@liang:~/linux/shell$ ./test.shlang@liang:~/linux/shell$ /bin/bash ./test.sh
lang@liang:~/linux/shell$ . ./test.sh
lang@liang:~/linux/shell$ source ./test.sh
對(duì)比,前兩種方式執(zhí)行方式實(shí)質(zhì)一樣,后兩種實(shí)質(zhì)相同
shell執(zhí)行過程解釋:
lang@liang:~/linux/shell$ ls
1.當(dāng)前shell ? fork產(chǎn)生子進(jìn)程,子進(jìn)程exec執(zhí)行l(wèi)s.
2.父進(jìn)程(shell) wait等待子進(jìn)程執(zhí)行l(wèi)s(exec)
3.子進(jìn)程運(yùn)行成功或者終止,父進(jìn)程恢復(fù)運(yùn)行.
對(duì)于后兩種方式 ? . ? ./ls ? ? ?source ls
父進(jìn)程直接在當(dāng)前shell下執(zhí)行命令,然后返回
其他問題:
將命令用(),引起來(lái),那么shell 會(huì)直接fork出子shell來(lái)執(zhí)行()中的命令.且可以多個(gè)命令;分割.
cd .. ; ls -l
特別強(qiáng)調(diào)
因?yàn)閟hell默認(rèn)執(zhí)行是fork--exec執(zhí)行命令.
那么,我們?cè)谀_本中的cd .. 等改變狀態(tài)的命令影響的只是子進(jìn)程環(huán)境,并不改變父進(jìn)程.
此時(shí),如果有需求,那么.可以以 ?source執(zhí)行 ?腳本
shell變量
命令
env
set
printenv
打印當(dāng)前環(huán)境變量.
本地變量,只存在于當(dāng)前shell,set命令顯示當(dāng)前shell定義的所有變量(本地變量以及環(huán)境變量)
shell中定義本地變量
VARNAME=value
export VARNAME ?將本地變量導(dǎo)出為環(huán)境變量
unset VARNAME 刪除本地變量或者環(huán)境變量
變量引用
shell變量都是字符串.對(duì)變量的引用使用$符號(hào).
字符串拼接能力
lang@liang:~/linux/shell$ echo $SHELL
/bin/bash
lang@liang:~/linux/shell$ echo $SHELLaaa
lang@liang:~/linux/shell$ echo ${SHELL}aaa
/bin/bashaaa
變量名代換* ?? []
通配符 * :匹配0或多個(gè)任意字符
?:匹配一個(gè)任意字符
[若干字符]:匹配[]中的任意一個(gè)字符的一次出現(xiàn)
命令帶換: ` ?或者 $()
lang@liang:~/linux/shell$ DATE=`date`
lang@liang:~/linux/shell$ echo $DATE
2016年 08月 15日 星期一 19:29:23 CST
lang@liang:~/linux/shell$ DATE=$(date)
lang@liang:~/linux/shell$ echo $DATE
2016年 08月 15日 星期一 19:30:20 CST
轉(zhuǎn)義字符
lang@liang:~/linux/shell$ touch \$\ \$
lang@liang:~/linux/shell$ ll
-rw-rw-r-- 1 lang lang? ? 0 8月? 15 19:32 $ $
創(chuàng)建文件名 以 - ?開頭時(shí)可以如下處理
lang@liang:~/linux/shell$ touch ./-hell
lang@liang:~/linux/shell$ ll ./-hell
-rw-rw-r-- 1 lang lang 0 8月? 15 19:32 ./-hell
lang@liang:~/linux/shell$ touch -- -lll
lang@liang:~/linux/shell$ ll
-rw-rw-r-- 1 lang lang? ? 0 8月? 15 19:35 -lll
單引號(hào)
shell腳本中單引號(hào)都可以界定字符串.而非字符,shell中單引號(hào)內(nèi)的所有字符保持字面值.
雙引號(hào)
雙引號(hào)用于保持引號(hào)內(nèi)suuoyou字符的字面值.(回車也不例外).除了以下
$變量值
``仍然表示命令替換
\$表示$的字面值
\代表轉(zhuǎn)義.