營銷型企業(yè)網(wǎng)站制作公司軟文網(wǎng)站推廣法
1.shell語法
概論
概論
shell是我們通過命令行與操作系統(tǒng)溝通的語言。shell腳本可以直接在命令行中執(zhí)行,也可以將一套邏輯組織成一個文件,方便復(fù)用。
AC Terminal中的命令行可以看成是一個“shell腳本在逐行執(zhí)行”。Linux中常見的shell腳本有很多種,常見的有:Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
zsh
…
Linux系統(tǒng)中一般默認使用bash,所以接下來講解bash中的語法。
文件開頭需要寫#! /bin/bash,指明bash為腳本解釋器。學習技巧
不要死記硬背,遇到含糊不清的地方,可以在AC Terminal里實際運行一遍。腳本示例
新建一個test.sh文件,內(nèi)容如下:#! /bin/bash
echo "Hello World!"
運行方式
作為可執(zhí)行文件acs@9e0ebfcd82d7:~$ chmod +x test.sh # 使腳本具有可執(zhí)行權(quán)限
acs@9e0ebfcd82d7:~$ ./test.sh # 當前路徑下執(zhí)行
Hello World! # 腳本輸出
acs@9e0ebfcd82d7:~$ /home/acs/test.sh # 絕對路徑下執(zhí)行
Hello World! # 腳本輸出
acs@9e0ebfcd82d7:~$ ~/test.sh # 家目錄路徑下執(zhí)行
Hello World! # 腳本輸出
用解釋器執(zhí)行acs@9e0ebfcd82d7:~$ bash test.sh
Hello World! # 腳本輸出
注釋
單行注釋
每行中#之后的內(nèi)容均是注釋。# 這是一行注釋echo 'Hello World' # 這也是注釋
多行注釋
格式::<<EOF
第一行注釋
第二行注釋
第三行注釋
EOF
其中EOF可以換成其它任意字符串。例如::<<abc
第一行注釋
第二行注釋
第三行注釋
abc:<<!
第一行注釋
第二行注釋
第三行注釋
!
變量
定義變量
定義變量,不需要加$符號,例如:name1='yxc' # 單引號定義字符串
name2="yxc" # 雙引號定義字符串
name3=yxc # 也可以不加引號,同樣表示字符串
使用變量
使用變量,需要加上$符號,或者${}符號。花括號是可選的,主要為了幫助解釋器識別變量邊界。name=yxc
echo $name # 輸出yxc
echo ${name} # 輸出yxc
echo ${name}acwing # 輸出yxcacwing
只讀變量
使用readonly或者declare可以將變量變?yōu)橹蛔x。name=yxc
readonly name
declare -r name # 兩種寫法均可name=abc # 會報錯,因為此時name只讀
刪除變量
unset可以刪除變量。name=yxc
unset name
echo $name # 輸出空行
變量類型
自定義變量(局部變量)
子進程不能訪問的變量
環(huán)境變量(全局變量)
子進程可以訪問的變量
自定義變量改成環(huán)境變量:acs@9e0ebfcd82d7:~$ name=yxc # 定義變量
acs@9e0ebfcd82d7:~$ export name # 第一種方法
acs@9e0ebfcd82d7:~$ declare -x name # 第二種方法
環(huán)境變量改為自定義變量:acs@9e0ebfcd82d7:~$ export name=yxc # 定義環(huán)境變量
acs@9e0ebfcd82d7:~$ declare +x name # 改為自定義變量
字符串
字符串可以用單引號,也可以用雙引號,也可以不用引號。單引號與雙引號的區(qū)別:單引號中的內(nèi)容會原樣輸出,不會執(zhí)行、不會取變量;
雙引號中的內(nèi)容可以執(zhí)行、可以取變量;
name=yxc # 不用引號
echo 'hello, $name \"hh\"' # 單引號字符串,輸出 hello, $name \"hh\"
echo "hello, $name \"hh\"" # 雙引號字符串,輸出 hello, yxc "hh"
獲取字符串長度name="yxc"
echo ${#name} # 輸出3
提取子串name="hello, yxc"
echo ${name:0:5} # 提取從0開始的5個字符
默認變量
文件參數(shù)變量
在執(zhí)行shell腳本時,可以向腳本傳遞參數(shù)。$1是第一個參數(shù),$2是第二個參數(shù),以此類推。特殊的,$0是文件名(包含路徑)。例如:創(chuàng)建文件test.sh:#! /bin/bashecho "文件名:"$0
echo "第一個參數(shù):"$1
echo "第二個參數(shù):"$2
echo "第三個參數(shù):"$3
echo "第四個參數(shù):"$4
然后執(zhí)行該腳本:acs@9e0ebfcd82d7:~$ chmod +x test.sh
acs@9e0ebfcd82d7:~$ ./test.sh 1 2 3 4
文件名:./test.sh
第一個參數(shù):1
第二個參數(shù):2
第三個參數(shù):3
第四個參數(shù):4
其它參數(shù)相關(guān)變量
參數(shù) 說明
$# 代表文件傳入的參數(shù)個數(shù),如上例中值為4
$* 由所有參數(shù)構(gòu)成的用空格隔開的字符串,如上例中值為"$1 $2 $3 $4"
$@ 每個參數(shù)分別用雙引號括起來的字符串,如上例中值為"$1" "$2" "$3" "$4"
$$ 腳本當前運行的進程ID
$? 上一條命令的退出狀態(tài)(注意不是stdout,而是exit code)。0表示正常退出,其他值表示錯誤
$(command) 返回command這條命令的stdout(可嵌套)
`command` 返回command這條命令的stdout(不可嵌套)
數(shù)組
數(shù)組中可以存放多個不同類型的值,只支持一維數(shù)組,初始化時不需要指明數(shù)組大小。
數(shù)組下標從0開始。定義
數(shù)組用小括號表示,元素之間用空格隔開。例如:array=(1 abc "def" yxc)
也可以直接定義數(shù)組中某個元素的值:array[0]=1
array[1]=abc
array[2]="def"
array[3]=yxc
讀取數(shù)組中某個元素的值
格式:${array[index]}
例如:array=(1 abc "def" yxc)
echo ${array[0]}
echo ${array[1]}
echo ${array[2]}
echo ${array[3]}
讀取整個數(shù)組
格式:${array[@]} # 第一種寫法
${array[*]} # 第二種寫法
例如:array=(1 abc "def" yxc)echo ${array[@]} # 第一種寫法
echo ${array[*]} # 第二種寫法
數(shù)組長度
類似于字符串${#array[@]} # 第一種寫法
${#array[*]} # 第二種寫法
例如:array=(1 abc "def" yxc)echo ${#array[@]} # 第一種寫法
echo ${#array[*]} # 第二種寫法
expr命令
expr命令用于求表達式的值,格式為:expr 表達式
表達式說明:用空格隔開每一項
用反斜杠放在shell特定的字符前面(發(fā)現(xiàn)表達式運行錯誤時,可以試試轉(zhuǎn)義)
對包含空格和其他特殊字符的字符串要用引號括起來
expr會在stdout中輸出結(jié)果。如果為邏輯關(guān)系表達式,則結(jié)果為真時,stdout輸出1,否則輸出0。
expr的exit code:如果為邏輯關(guān)系表達式,則結(jié)果為真時,exit code為0,否則為1。
字符串表達式
length STRING
返回STRING的長度
index STRING CHARSET
CHARSET中任意單個字符在STRING中最前面的字符位置,下標從1開始。如果在STRING中完全不存在CHARSET中的字符,則返回0。
substr STRING POSITION LENGTH
返回STRING字符串中從POSITION開始,長度最大為LENGTH的子串。如果POSITION或LENGTH為負數(shù),0或非數(shù)值,則返回空字符串。
示例:str="Hello World!"echo `expr length "$str"` # ``不是單引號,表示執(zhí)行該命令,輸出12
echo `expr index "$str" aWd` # 輸出7,下標從1開始
echo `expr substr "$str" 2 3` # 輸出 ell
整數(shù)表達式
expr支持普通的算術(shù)操作,算術(shù)表達式優(yōu)先級低于字符串表達式,高于邏輯關(guān)系表達式。+ -
加減運算。兩端參數(shù)會轉(zhuǎn)換為整數(shù),如果轉(zhuǎn)換失敗則報錯。* / %
乘,除,取模運算。兩端參數(shù)會轉(zhuǎn)換為整數(shù),如果轉(zhuǎn)換失敗則報錯。() 可以改變優(yōu)先級,但需要用反斜杠轉(zhuǎn)義示例:a=3
b=4echo `expr $a + $b` # 輸出7
echo `expr $a - $b` # 輸出-1
echo `expr $a \* $b` # 輸出12,*需要轉(zhuǎn)義
echo `expr $a / $b` # 輸出0,整除
echo `expr $a % $b` # 輸出3
echo `expr \( $a + 1 \) \* \( $b + 1 \)` # 輸出20,值為(a + 1) * (b + 1)
邏輯關(guān)系表達式
|
如果第一個參數(shù)非空且非0,則返回第一個參數(shù)的值,否則返回第二個參數(shù)的值,但要求第二個參數(shù)的值也是非空或非0,否則返回0。如果第一個參數(shù)是非空或非0時,不會計算第二個參數(shù)。
&
如果兩個參數(shù)都非空且非0,則返回第一個參數(shù),否則返回0。如果第一個參為0或為空,則不會計算第二個參數(shù)。< <= = == != >= >
比較兩端的參數(shù),如果為true,則返回1,否則返回0。”==”是”=”的同義詞。”expr”首先嘗試將兩端參數(shù)轉(zhuǎn)換為整數(shù),并做算術(shù)比較,如果轉(zhuǎn)換失敗,則按字符集排序規(guī)則做字符比較。() 可以改變優(yōu)先級,但需要用反斜杠轉(zhuǎn)義
示例:a=3
b=4echo `expr $a \> $b` # 輸出0,>需要轉(zhuǎn)義
echo `expr $a '<' $b` # 輸出1,也可以將特殊字符用引號引起來
echo `expr $a '>=' $b` # 輸出0
echo `expr $a \<\= $b` # 輸出1c=0
d=5echo `expr $c \& $d` # 輸出0
echo `expr $a \& $b` # 輸出3
echo `expr $c \| $d` # 輸出5
echo `expr $a \| $b` # 輸出3
read命令
read命令用于從標準輸入中讀取單行數(shù)據(jù)。當讀到文件結(jié)束符時,exit code為1,否則為0。參數(shù)說明-p: 后面可以接提示信息
-t:后面跟秒數(shù),定義輸入字符的等待時間,超過等待時間后會自動忽略此命令
實例:acs@9e0ebfcd82d7:~$ read name # 讀入name的值
acwing yxc # 標準輸入
acs@9e0ebfcd82d7:~$ echo $name # 輸出name的值
acwing yxc #標準輸出
acs@9e0ebfcd82d7:~$ read -p "Please input your name: " -t 30 name # 讀入name的值,等待時間30秒
Please input your name: acwing yxc # 標準輸入
acs@9e0ebfcd82d7:~$ echo $name # 輸出name的值
acwing yxc # 標準輸出
echo命令
echo用于輸出字符串。命令格式:echo STRING
顯示普通字符串
echo "Hello AC Terminal"
echo Hello AC Terminal # 引號可以省略
顯示轉(zhuǎn)義字符
echo "\"Hello AC Terminal\"" # 注意只能使用雙引號,如果使用單引號,則不轉(zhuǎn)義
echo \"Hello AC Terminal\" # 也可以省略雙引號
顯示變量
name=yxc
echo "My name is $name" # 輸出 My name is yxc
顯示換行
echo -e "Hi\n" # -e 開啟轉(zhuǎn)義
echo "acwing"
輸出結(jié)果:Hiacwing
顯示不換行
echo -e "Hi \c" # -e 開啟轉(zhuǎn)義 \c 不換行
echo "acwing"
輸出結(jié)果:Hi acwing
顯示結(jié)果定向至文件
echo "Hello World" > output.txt # 將內(nèi)容以覆蓋的方式輸出到output.txt中
原樣輸出字符串,不進行轉(zhuǎn)義或取變量(用單引號)
name=acwing
echo '$name\"'
輸出結(jié)果$name\"
顯示命令的執(zhí)行結(jié)果
echo `date`
輸出結(jié)果:Wed Sep 1 11:45:33 CST 2021
printf命令
printf命令用于格式化輸出,類似于C/C++中的printf函數(shù)。默認不會在字符串末尾添加換行符。命令格式:printf format-string [arguments...]
用法示例
腳本內(nèi)容:printf "%10d.\n" 123 # 占10位,右對齊
printf "%-10.2f.\n" 123.123321 # 占10位,保留2位小數(shù),左對齊
printf "My name is %s\n" "yxc" # 格式化輸出字符串
printf "%d * %d = %d\n" 2 3 `expr 2 \* 3` # 表達式的值作為參數(shù)
輸出結(jié)果:123.
123.12 .
My name is yxc
2 * 3 = 6
test命令與判斷符號[]
邏輯運算符&&和||
&& 表示與,|| 表示或
二者具有短路原則:
expr1 && expr2:當expr1為假時,直接忽略expr2
expr1 || expr2:當expr1為真時,直接忽略expr2
表達式的exit code為0,表示真;為非零,表示假。(與C/C++中的定義相反)
test命令
在命令行中輸入man test,可以查看test命令的用法。test命令用于判斷文件類型,以及對變量做比較。test命令用exit code返回結(jié)果,而不是使用stdout。0表示真,非0表示假。例如:test 2 -lt 3 # 為真,返回值為0
echo $? # 輸出上個命令的返回值,輸出0
acs@9e0ebfcd82d7:~$ ls # 列出當前目錄下的所有文件
homework output.txt test.sh tmp
acs@9e0ebfcd82d7:~$ test -e test.sh && echo "exist" || echo "Not exist"
exist # test.sh 文件存在
acs@9e0ebfcd82d7:~$ test -e test2.sh && echo "exist" || echo "Not exist"
Not exist # testh2.sh 文件不存在
文件類型判斷
命令格式:test -e filename # 判斷文件是否存在
測試參數(shù) 代表意義
-e 文件是否存在
-f 是否為文件
-d 是否為目錄
文件權(quán)限判斷
命令格式:test -r filename # 判斷文件是否可讀
測試參數(shù) 代表意義
-r 文件是否可讀
-w 文件是否可寫
-x 文件是否可執(zhí)行
-s 是否為非空文件
整數(shù)間的比較
命令格式:test $a -eq $b # a是否等于b
測試參數(shù) 代表意義
-eq a是否等于b
-ne a是否不等于b
-gt a是否大于b
-lt a是否小于b
-ge a是否大于等于b
-le a是否小于等于b
字符串比較
測試參數(shù) 代表意義
test -z STRING 判斷STRING是否為空,如果為空,則返回true
test -n STRING 判斷STRING是否非空,如果非空,則返回true(-n可以省略)
test str1 == str2 判斷str1是否等于str2
test str1 != str2 判斷str1是否不等于str2
多重條件判定
命令格式:test -r filename -a -x filename
測試參數(shù) 代表意義
-a 兩條件是否同時成立
-o 兩條件是否至少一個成立
! 取反。如 test ! -x file,當file不可執(zhí)行時,返回true
判斷符號[]
[]與test用法幾乎一模一樣,更常用于if語句中。另外[[]]是[]的加強版,支持的特性更多。例如:[ 2 -lt 3 ] # 為真,返回值為0
echo $? # 輸出上個命令的返回值,輸出0
acs@9e0ebfcd82d7:~$ ls # 列出當前目錄下的所有文件
homework output.txt test.sh tmp
acs@9e0ebfcd82d7:~$ [ -e test.sh ] && echo "exist" || echo "Not exist"
exist # test.sh 文件存在
acs@9e0ebfcd82d7:~$ [ -e test2.sh ] && echo "exist" || echo "Not exist"
Not exist # testh2.sh 文件不存在
注意:[]內(nèi)的每一項都要用空格隔開
中括號內(nèi)的變量,最好用雙引號括起來
中括號內(nèi)的常數(shù),最好用單或雙引號括起來
例如:name="acwing yxc"
[ $name == "acwing yxc" ] # 錯誤,等價于 [ acwing yxc == "acwing yxc" ],參數(shù)太多
[ "$name" == "acwing yxc" ] # 正確
判斷語句
if…then形式
類似于C/C++中的if-else語句。單層if
命令格式:if condition
then語句1語句2...
fi
示例:a=3
b=4if [ "$a" -lt "$b" ] && [ "$a" -gt 2 ]
thenecho ${a}在范圍內(nèi)
fi
輸出結(jié)果:3在范圍內(nèi)
單層if-else
命令格式if condition
then語句1語句2...
else語句1語句2...
fi
示例:a=3
b=4if ! [ "$a" -lt "$b" ]
thenecho ${a}不小于$
elseecho ${a}小于$
fi
輸出結(jié)果:3小于4
多層if-elif-elif-else
命令格式if condition
then語句1語句2...
elif condition
then語句1語句2...
elif condition
then語句1語句2
else語句1語句2...
fi
示例:a=4if [ $a -eq 1 ]
thenecho ${a}等于1
elif [ $a -eq 2 ]
thenecho ${a}等于2
elif [ $a -eq 3 ]
thenecho ${a}等于3
elseecho 其他
fi
輸出結(jié)果:其他
case…esac形式
類似于C/C++中的switch語句。命令格式case $變量名稱 in值1)語句1語句2...;; # 類似于C/C++中的break值2)語句1語句2...;;*) # 類似于C/C++中的default語句1語句2...;;
esac
示例:a=4case $a in1)echo ${a}等于1;; 2)echo ${a}等于2;; 3) echo ${a}等于3;; *)echo 其他;;
esac
輸出結(jié)果:其他
循環(huán)語句
for…in…do…done
命令格式:for var in val1 val2 val3
do語句1語句2...
done
示例1,輸出a 2 cc,每個元素一行:for i in a 2 cc
doecho $i
done
示例2,輸出當前路徑下的所有文件名,每個文件名一行:for file in `ls`
doecho $file
done
示例3,輸出1-10for i in $(seq 1 10)
doecho $i
done
示例4,使用{1..10} 或者 {a..z}for i in {a..z}
doecho $i
done
for ((…;…;…)) do…done
命令格式:for ((expression; condition; expression))
do語句1語句2
done
示例,輸出1-10,每個數(shù)占一行:for ((i=1; i<=10; i++))
doecho $i
done
while…do…done循環(huán)
命令格式:while condition
do語句1語句2...
done
示例,文件結(jié)束符為Ctrl+d,輸入文件結(jié)束符后read指令返回false。while read name
doecho $name
done
until…do…done循環(huán)
當條件為真時結(jié)束。命令格式:until condition
do語句1語句2...
done
示例,當用戶輸入yes或者YES時結(jié)束,否則一直等待讀入。until [ "${word}" == "yes" ] || [ "${word}" == "YES" ]
doread -p "Please input yes/YES to stop this program: " word
done
break命令
跳出當前一層循環(huán),注意與C/C++不同的是:break不能跳出case語句。示例while read name
dofor ((i=1;i<=10;i++))docase $i in8)break;;*)echo $i;;esacdone
done
該示例每讀入非EOF的字符串,會輸出一遍1-7。
該程序可以輸入Ctrl+d文件結(jié)束符來結(jié)束,也可以直接用Ctrl+c殺掉該進程。continue命令
跳出當前循環(huán)。示例:for ((i=1;i<=10;i++))
doif [ `expr $i % 2` -eq 0 ]thencontinuefiecho $i
done
該程序輸出1-10中的所有奇數(shù)。死循環(huán)的處理方式
如果AC Terminal可以打開該程序,則輸入Ctrl+c即可。否則可以直接關(guān)閉進程:使用top命令找到進程的PID
輸入kill -9 PID即可關(guān)掉此進程
函數(shù)
bash中的函數(shù)類似于C/C++中的函數(shù),但return的返回值與C/C++不同,返回的是exit code,取值為0-255,0表示正常結(jié)束。如果想獲取函數(shù)的輸出結(jié)果,可以通過echo輸出到stdout中,然后通過$(function_name)來獲取stdout中的結(jié)果。函數(shù)的return值可以通過$?來獲取。命令格式:[function] func_name() { # function關(guān)鍵字可以省略語句1語句2...
}
不獲取 return值和stdout值
示例func() {name=yxcecho "Hello $name"
}func
輸出結(jié)果:Hello yxc
獲取 return值和stdout值
不寫return時,默認return 0。示例func() {name=yxcecho "Hello $name"return 123
}output=$(func)
ret=$?echo "output = $output"
echo "return = $ret"
輸出結(jié)果:output = Hello yxc
return = 123
函數(shù)的輸入?yún)?shù)
在函數(shù)內(nèi),$1表示第一個輸入?yún)?shù),$2表示第二個輸入?yún)?shù),依此類推。注意:函數(shù)內(nèi)的$0仍然是文件名,而不是函數(shù)名。示例:func() { # 遞歸計算 $1 + ($1 - 1) + ($1 - 2) + ... + 0word=""while [ "${word}" != 'y' ] && [ "${word}" != 'n' ]doread -p "要進入func($1)函數(shù)嗎?請輸入y/n:" worddoneif [ "$word" == 'n' ]thenecho 0return 0fi if [ $1 -le 0 ] thenecho 0return 0fi sum=$(func $(expr $1 - 1))echo $(expr $sum + $1)
}echo $(func 10)
輸出結(jié)果:55
函數(shù)內(nèi)的局部變量
可以在函數(shù)內(nèi)定義局部變量,作用范圍僅在當前函數(shù)內(nèi)。可以在遞歸函數(shù)中定義局部變量。命令格式:local 變量名=變量值
例如:#! /bin/bashfunc() {local name=yxcecho $name
}
funcecho $name
輸出結(jié)果:yxc第一行為函數(shù)內(nèi)的name變量,第二行為函數(shù)外調(diào)用name變量,會發(fā)現(xiàn)此時該變量不存在。
exit命令
exit命令用來退出當前shell進程,并返回一個退出狀態(tài);使用$?可以接收這個退出狀態(tài)。exit命令可以接受一個整數(shù)值作為參數(shù),代表退出狀態(tài)。如果不指定,默認狀態(tài)值是 0。exit退出狀態(tài)只能是一個介于 0~255 之間的整數(shù),其中只有 0 表示成功,其它值都表示失敗。示例:創(chuàng)建腳本test.sh,內(nèi)容如下:#! /bin/bashif [ $# -ne 1 ] # 如果傳入?yún)?shù)個數(shù)等于1,則正常退出;否則非正常退出。
thenecho "arguments not valid"exit 1
elseecho "arguments valid"exit 0
fi
執(zhí)行該腳本:acs@9e0ebfcd82d7:~$ chmod +x test.sh
acs@9e0ebfcd82d7:~$ ./test.sh acwing
arguments valid
acs@9e0ebfcd82d7:~$ echo $? # 傳入一個參數(shù),則正常退出,exit code為0
0
acs@9e0ebfcd82d7:~$ ./test.sh
arguments not valid
acs@9e0ebfcd82d7:~$ echo $? # 傳入?yún)?shù)個數(shù)不是1,則非正常退出,exit code為1
1
文件重定向
每個進程默認打開3個文件描述符:stdin標準輸入,從命令行讀取數(shù)據(jù),文件描述符為0
stdout標準輸出,向命令行輸出數(shù)據(jù),文件描述符為1
stderr標準錯誤輸出,向命令行輸出數(shù)據(jù),文件描述符為2
可以用文件重定向?qū)⑦@三個文件重定向到其他文件中。重定向命令列表
命令 說明
command > file 將stdout重定向到file中
command < file 將stdin重定向到file中
command >> file 將stdout以追加方式重定向到file中
command n> file 將文件描述符n重定向到file中
command n>> file 將文件描述符n以追加方式重定向到file中
輸入和輸出重定向
echo -e "Hello \c" > output.txt # 將stdout重定向到output.txt中
echo "World" >> output.txt # 將字符串追加到output.txt中read str < output.txt # 從output.txt中讀取字符串echo $str # 輸出結(jié)果:Hello World
同時重定向stdin和stdout
創(chuàng)建bash腳本:#! /bin/bashread a
read becho $(expr "$a" + "$b")
創(chuàng)建input.txt,里面的內(nèi)容為:3
4
執(zhí)行命令:acs@9e0ebfcd82d7:~$ chmod +x test.sh # 添加可執(zhí)行權(quán)限
acs@9e0ebfcd82d7:~$ ./test.sh < input.txt > output.txt # 從input.txt中讀取內(nèi)容,將輸出寫入output.txt中
acs@9e0ebfcd82d7:~$ cat output.txt # 查看output.txt中的內(nèi)容
7
引入外部腳本
類似于C/C++中的include操作,bash也可以引入其他文件中的代碼。語法格式:. filename # 注意點和文件名之間有一個空格或source filename
示例
創(chuàng)建test1.sh,內(nèi)容為:#! /bin/bashname=yxc # 定義變量name
然后創(chuàng)建test2.sh,內(nèi)容為:#! /bin/bashsource test1.sh # 或 . test1.shecho My name is: $name # 可以使用test1.sh中的變量
執(zhí)行命令:acs@9e0ebfcd82d7:~$ chmod +x test2.sh
acs@9e0ebfcd82d7:~$ ./test2.sh
My name is: yxc
轉(zhuǎn)載自acwingyxc