linux shell指令碼除錯小技巧

2021-10-03 03:05:55 字數 2649 閱讀 7428

之前在寫shell指令碼時,每次除錯指令碼非常麻煩。

過程如下 寫指令碼—執行指令碼—指令碼語法有問題----找到報錯的行----修改後繼續執行指令碼----指令碼中部分**報錯還能繼續執行----再次除錯指令碼—直到指令碼正常執行。

下面介紹幾個實用的小技巧

1、不加nounset

[root@lineqi ~]# cat testjs.sh

#!/bin/bash

bb=「cccc」

echo $aa

echo $bb

[root@lineqi ~]# ./testjs.sh

cccc

不加nounset引數時,遇到不存在的變數,預設情況下會忽略,直接執行下行語句。

2、加nounset

#!/bin/bash

set -o nounset

bb=「cccc」

echo $aa

echo $bb

[root@lineqi ~]# ./testjs.sh

./testjs.sh: line 4: aa: unbound variable

不加nounset引數時,遇到不存在的變數,會提示錯誤資訊,不會執行下行語句。

在預設情況下,遇到shell指令碼遇到執行錯誤時,會跳過並繼續執行後命令,這時可以通過errexit來避免。

[root@lineqi ~]# /opt/install_mysql57_v1.5.sh

執行指令碼前,檢查語法錯誤

[root@lineqi ~]# bash -n /opt/install_mysql57_v1.5.sh

/opt/install_mysql57_v1.5.sh: line 19: syntax error near unexpected tokenfi' /opt/install_mysql57_v1.5.sh: line 19:fi』

在指令碼前set -o verbose加上引數,執行過程如下

[root@lineqi ~]# /opt/install_mysql57_v1.5.sh

v_mysql_data=/mysql/data

v_mysql_log=/mysql/log

v_software_dir=/opt

v_tar_name=/opt/mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar.tar

#check mariadb is installed

is_mariadb_install=rpm -qa|grep mariadb|wc -l

rpm -qa|grep mariadb|wc -l

if [ $is_mariadb_install -ge 0 ] ;

echo 『aa』

for i inrpm -qa |grep mariadb

dorpm -e --nodeps $i

done

fi/opt/install_mysql57_v1.5.sh: line 18: syntax error near unexpected tokenfi' /opt/install_mysql57_v1.5.sh: line 18:fi』

說明:與bash -v輸出的結果基本一致,少了指令碼注釋和set部分

[root@lineqi ~]# /opt/install_mysql57_v1.5.sh

跟蹤指令碼裡每乙個命令的執行過程,並附加擴充資訊

[root@lineqi ~]# bash -x /opt/install_mysql57_v1.5.sh

跟蹤指令碼裡每乙個命令的執行過程,並顯示錯誤資訊的行號

[root@lineqi ~]# bash -v /opt/install_mysql57_v1.5.sh

#!/bin/bash

#function :install mysql5.7 on centos7.4

#author:lineqi

#create time:2019-01-01

set -o nounset

set -o errexit

v_mysql_data=/mysql/data

v_mysql_log=/mysql/log

v_software_dir=/opt

v_tar_name=/opt/mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar.tar

#check mariadb is installed

is_mariadb_install=rpm -qa|grep mariadb|wc -l

rpm -qa|grep mariadb|wc -l

if [ $is_mariadb_install -ge 0 ] ;

echo 『aa』

for i inrpm -qa |grep mariadb

dorpm -e --nodeps $i

done

fi/opt/install_mysql57_v1.5.sh: line 19: syntax error near unexpected token `fi』

注意:-v引數顯示已執行的指令碼內容包括注釋

總結:在除錯shell指令碼時,以上幾個引數還是非常有用的。

LInux shell入門 除錯

shell的除錯 sh option bash option echo 輸出內容 list color red e 如果乙個命令失敗就立即退出 color shell執行時,若遇到不存在或不可執行的命令 重定向失敗或命令非正常結束等情況時,如果未經重新定向,該出錯資訊會顯示在終端螢幕上,而shell...

Linux Shell 程式除錯

linux shell程式除錯 shell程式的除錯是通過執行程式時加入相關除錯選項或在指令碼程式中加入相關語句,讓shell程式在執行過程中顯示出一些可供參考的 除錯資訊 當然,使用者也可以在shell程式中的適當位置加入一些echo命令用於除錯與跟蹤。方法一 在執行指令碼程式時加入除錯選項 用法...

Linux Shell指令碼基礎

shell指令碼在處理自動迴圈或大的任務方面可節省大量時間,且功能強大。任何指令碼都可能有注釋,加注釋需要此行的第乙個字元為 直譯器對此行不予解釋。指令碼不是複雜的程式,它是按行解釋的。指令碼第一行總是以 bin sh開始,這段指令碼通知shell使用系統上的 bourne shell直譯器。指令碼...