建設(shè)一個菠菜網(wǎng)站成本我贏網(wǎng)seo優(yōu)化網(wǎng)站
腳本的基本元素
聲明,在解釋并執(zhí)行當(dāng)前腳本文件中的語句之前,需要聲明使用的命令解釋器
#一般寫的解釋器為
#!/bin/bash
這里的#不再是注釋了,而是必要的聲明
命令,也就是需要執(zhí)行的語句
注釋,對代碼進行解釋說明
分為單行注釋和多行注釋
單行注釋 以#開頭的一整行
#這里是注釋
#這里也是注釋多行注釋 使用冒號“:”配合here document可實現(xiàn)
:<<block
這里是注釋
這里也是注釋
這里還是注釋
block
賦予rx的權(quán)限
shell腳本編寫規(guī)則
建議腳本文件名應(yīng)該簡單清晰明了,看了就知道意思
文件開頭指定腳本解釋器 #!/bin/sh或者#!/bin/bash
在開頭寫明版本特權(quán)等信息
盡量使用英文注釋
shell常用的命令
echo
echo是用于終端打印的基本命令,默認情況下,echo 在每次調(diào)用后會添加一個換行符
[root@localhost shell]# echo hello
hello
[root@localhost shell]# echo "hello world"
hello world
[root@localhost shell]# echo "hello;world"
hello;world
[root@localhost shell]# echo hello;world
hello
bash: world: command not found...
Failed to search for file: /mnt/BaseOS was not found#注意這里的雙引號""用來包含整個語句,防止被;打斷語句
echo參數(shù) | 說明 |
-n | 不換行輸出 |
-e | 解析轉(zhuǎn)義字符 |
\n | 換行 |
\r | 回車 |
\t | 制表符 |
\b | 退格 |
\v | 縱向制表符 |
[root@localhost shell]# echo -n why so serious
why so serious[root@localhost shell]#
[root@localhost shell]# echo -e why\tso\tserious
whytsotserious
[root@localhost shell]# echo -e "why\tso\tserious"
why so serious
eval
命令格式:eval args
功能:當(dāng)shell程序執(zhí)行到eval語句時,shell讀入?yún)?shù)args,并將它們組合成一個新的命令,然后執(zhí)行
[root@localhost shell]# a='shuju;head -1 /etc/passwd'
[root@localhost shell]# echo $a
shuju;head -1 /etc/passwd
[root@localhost shell]# eval echo $a
shuju
root:x:0:0:root:/root:/bin/bash
exec
命令能夠在不創(chuàng)建新的子進程的前提下,轉(zhuǎn)去執(zhí)行指定的命令,當(dāng)指定的命令執(zhí)行
完畢后,該進程就終止了
export
export設(shè)置或者顯示環(huán)境變量
read
read 是一個重要的 bash 命令,用于從鍵盤或標(biāo)準(zhǔn)輸入讀取文本,我們可以使用 read 命
令以交互形式讀取來自用戶的輸入
通常我們按下回車鍵表示命令輸入完成,但是很特殊情況下,我們需要基于字符數(shù)或者
特定字符來表示命令輸入完成
-p prompt:設(shè)置提示信息
-t timeout:設(shè)置輸入等待時間,單位默認為秒
[root@localhost shell]# read -t 10 -p "please input your name:" name
please input your name:me
[root@localhost shell]# echo $name
me
[root@localhost shell]# echo -n "please input your name:"; read name1 name2
please input your name:me you
[root@localhost shell]# echo $name1
me
[root@localhost shell]# echo $name2
you
shift
在程序中每使用一次shift語句,都會使所有的位置參數(shù)依次向左移動一個位置,
并使位置參數(shù)$#減1,直到減到0為止
exit
退出shell程序
shell腳本的執(zhí)行方式
bash ./filename.sh——產(chǎn)生子進程,再運行,使用當(dāng)前指定的bash shell去運行
./filename.sh
產(chǎn)生子進程,再運行,使用腳本里面指定的shell去運行。使用該種方式
執(zhí)行需要x權(quán)限
source ./filename.sh
source命令是一個shell內(nèi)部命令,其功能是讀取指定的shell程
序文件,并且依次執(zhí)行其中的所有的語句,并沒有創(chuàng)建新的子shell進程,所以腳本里面所有創(chuàng)
建的變量都會保存到當(dāng)前的shell里面
.filename.sh——和source一樣,也是使用當(dāng)前進程執(zhí)行
首選我們寫一個以 .sh結(jié)尾的文件
vim read01.sh
#!/bin/bashread -n1 -p "DO you want wo continue [Y/N]" answer
case $answer inY|y)
echo "fine,continue";;N|n)
echo "ok,good bye";;*)
echo "error choice";;
esac
exit 0
使用各種方法執(zhí)行它
這里使用第一種方法
[root@localhost shell]# bash ./read01.sh
DO you want wo continue [Y/N]yfine,continue