shell學習之shell執行方式及排錯

shell程序組成:
變量設定:
內置命令:
shell的語法結構:
函數及其餘命令行的程序所組成
shell

1、shell的執行方式bash

示例腳本(計算1到100的和):ide

[root@lovelace 51cto]# cat sum.sh
#!/bin/bash
#Verson:0.1
#Auther:lovelace
#Pragram:This program is and calculate from 1 to 100
#define i an integer
declare -i sum=0
#loop and from 1 to 100
for x in {1..100};do
let sum+=x
let x++
done
echo "The sum is:" $sum


一、相對路徑執行腳本,給予shell scripts執行權限,而後切換到scripts腳本所在的目錄下,執行scripts
./函數

#查看文件有沒有執行權限
[root@lovelace 51cto]# ll sum.sh
-rwxr-xr-x 1 root root 217 05-20 12:37 sum.sh
#賦權並執行程序
[root@lovelace 51cto]# chmod +x sum.sh ; ./sum.sh
The sum is: 5050

二、絕對路徑執行
oop

#查看當前腳本所在路徑並使用絕對路徑執行該腳本
[root@lovelace 51cto]# pwd
/home/scripts/51cto
[root@lovelace 51cto]# /home/scripts/51cto/sum.sh
The sum is: 5050


三、直接使用bash或sh來執行scripts
這種方式執行腳本不須要提早給予權限spa

#使用當腳本有執行權限的時候使用sh或bash的執行結果
[root@lovelace 51cto]# sh sum.sh
The sum is: 5050
[root@lovelace 51cto]# bash sum.sh
The sum is: 5050
#取消腳本的執行權限,再次以sh或bash執行查看結果
[root@lovelace 51cto]# chmod -x sum.sh ; ll sum.sh
-rw-r--r-- 1 root root 231 05-20 12:52 sum.sh
[root@lovelace 51cto]# bash sum.sh
The sum is: 5050
[root@lovelace 51cto]# sh sum.sh
The sum is: 5050

以上腳本執行毀在當前shell下開啓一個子shell,而後在子shell中執行該腳本,當腳本執行完以後再
關閉相應的子shell
四、在現行的shell中執行腳本
. /home/test/51cto/test.sh
.和/之間最少要有一個空格 (這種格式在腳本調用中常見)參見~/.bash_profile腳本文件命令行

[root@lovelace 51cto]# cat ~/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

使用source執行腳本    source scriptsname.ship

[root@lovelace 51cto]# source sum.sh
The sum is: 5050

 

2、bash  shell排錯文檔

在這裏咱們把腳本稍微修改下,以知足咱們下面的排錯,咱們把done修改成donit

#!/bin/bash
#Verson:0.1
#Auther:lovelace
#Pragram:This program is and calculate from 1 to 100
#define i an integer
declare -i sum=0
#loop and from 1 to 100
for x in {1..100};do
let sum+=x
let x++
don
echo "The sum is:" $sum

bash排錯:
一、bash  -v  scriptsname.sh  :檢查語法的指令  提示咱們15行附近有語法錯誤,但沒有指定具體哪一行錯誤

[root@lovelace 51cto]# bash -v sum.sh
#!/bin/bash
#Verson:0.1
#Auther:lovelace
#Pragram:This program is and calculate from 1 to 100
#define i an integer
declare -i sum=0
#loop and from 1 to 100
for x in {1..100};do
let sum+=x
let x++
don
echo "The sum is:" $sum
sum.sh: line 15: syntax error: unexpected end of file

 

二、bash -n  scriptsname.sh  :查看程序行  只返回語法錯誤信息

[root@lovelace 51cto]# bash -n sum.sh
sum.sh: line 15: syntax error: unexpected end of file


三、bash -x scriptsname.sh :追蹤執行過程  這是是排錯中最經常使用的(若是有錯誤就不在往下執行,直接打印出錯誤),不過對於篇幅很大的腳本文件,排錯也是件麻煩事情

[root@lovelace 51cto]# bash -x sum.sh
+ declare -i sum=0
sum.sh: line 15: syntax error: unexpected end of file


四、特定位置放置echo:在for循環上面添加一句:echo 「print test",打印成功,說明前面的語句都沒問題

[root@lovelace 51cto]# bash -x sum.sh
+ declare -i sum=0
+ echo 'print test'
print test
sum.sh: line 16: syntax error: unexpected end of file

五、shopt定義變量,可避免未定義變量而是用變量

關於shopt的用法:
shopt 
 -s:啓用選項
 -u:關閉選項
 -o:使用和set -o相同的選項來設置
 -q:不顯示開關狀態,已回傳狀態來判斷,0表示啓用,非0表示關閉

六、單步執行,在命令行中把要寫入腳本的文件都執行一邊,而後在寫入腳本,減小錯誤

[root@lovelace 51cto]# declare -i sum=0
[root@lovelace 51cto]# for x in {1..100};do let sum+=x;let x++;echo $sum;done

七、使用函數減少錯誤範圍
八、set -x,在腳本中添加一行:set -x  此功能相似 bash -x scripts的執行效果

[root@lovelace 51cto]# cat sum.sh
#!/bin/bash
#Verson:0.1
#Auther:lovelace
#Pragram:This program is and calculate from 1 to 100
#在腳本中添加下面這一行
set -x
[root@lovelace 51cto]# ./sum.sh
+ declare -i sum=0
+ echo 'print test'
print test
./sum.sh: line 16: syntax error: unexpected end of file


小貼士:有些時候咱們編輯scripts的時候可能出現沒有保存的狀況,這個時候每次打開這個
scripts都會彈出一堆信息,非常煩人,這個時候你能夠找到這個腳本的編輯目錄下
有一個和腳本命令加上.swp的後綴的隱藏文件,把這個隱藏文件刪除便可。


其餘:scripts中不少時候空格很重要,如若否則就可能出現錯誤。

set :設定bash shell的屬性,若不加任何參數和選項,她會顯示全部的shell變量和函數的內容。
    -o: 開啓某個選項
    +o: 關閉某個選項

後記:shell腳本編寫和排錯都是相對的,每一個人都有本身總結出來的一套排錯套路,可是這裏仍是建議初寫腳本的兄弟們書寫的時候儘量的先在命令行下執行下你所要執行的語句,而後再寫入腳本,這樣儘管會浪費你一點時間,可是相較於漫無目的的查找錯誤來講,仍是值得的。尤爲是針對大篇幅的腳本文檔編寫的時候。

相關文章
相關標籤/搜索