Yadda ake Neman aiwatar da umarni a Rubutun Shell tare da Binciken Shell


A cikin wannan labarin na jerin gyara rubutun harsashi, za mu bayyana yanayin gyara rubutun harsashi na uku, wato binciken harsashi da duba wasu misalai don nuna yadda yake aiki, da kuma yadda za a iya amfani da shi.

Bangaren da ya gabata na wannan silsilar yana ba da haske a sarari kan wasu hanyoyin gyara rubutun harsashi guda biyu: yanayin magana da yanayin duba ma'amala tare da misalai masu sauƙin fahimta na yadda ake kunna gyara rubutun harsashi a waɗannan hanyoyin.

  1. Yadda Ake Kunna Yanayin Debugging Rubutun Shell a Linux - Sashe na 1
  2. Yadda Ake Yi Yanayin Gyaran Jumla a cikin Rubutun Shell - Kashi na 2

Binciken Shell a sauƙaƙe yana nufin gano aiwatar da umarni a cikin rubutun harsashi. Don kunna binciken harsashi, yi amfani da -x zaɓin gyara kuskure.

Wannan yana jagorantar harsashi don nuna duk umarni da hujjojinsu akan tashar yayin da ake aiwatar da su.

Za mu yi amfani da rubutun harsashi sys_info.sh da ke ƙasa, wanda ke buga kwanan wata da lokacin tsarin ku a taƙaice, adadin masu amfani da suka shiga da kuma lokacin lokacin tsarin. Koyaya, yana ƙunshe da kurakuran haɗin gwiwa waɗanda muke buƙatar nemo kuma mu gyara.

#!/bin/bash
#script to print brief system info

ROOT_ID="0"

DATE=`date`
NO_USERS=`who | wc -l`
UPTIME=`uptime`

check_root(){
    if [ "$UID" -ne "$ROOT_ID" ]; then
        echo "You are not allowed to execute this program!"
        exit 1;    
}

print_sys_info(){
    echo "System Time    : $DATE"
    echo "Number of users: $NO_USERS"
    echo "System Uptime  : $UPTIME
}

check_root
print_sys_info

exit 0

Ajiye fayil ɗin kuma sanya rubutun aiwatarwa. Rubutun za a iya gudanar da shi ta tushen kawai, don haka yi amfani da umarnin sudo don gudanar da shi kamar ƙasa:

$ chmod +x sys_info.sh
$ sudo bash -x sys_info.sh

Daga abin da aka fitar a sama, za mu iya lura da cewa, ana fara aiwatar da umarni kafin a musanya abin da yake fitarwa a matsayin ƙimar ma'auni.

Misali, kwanan wata an fara aiwatar da ita kuma an musanya fitowar ta a matsayin ƙimar DATE mai canzawa.

Za mu iya yin duban ɗabi'a don nuna kurakuran ɗabi'a kamar haka:

$ sudo bash -n sys_info.sh 

Idan muka kalli rubutun harsashi da kyau, za mu gane cewa idan bayanin ya rasa kalmar rufewa ta fi. Don haka, bari mu ƙara shi kuma sabon rubutun ya kamata yanzu ya yi kama da ƙasa:

#!/bin/bash
#script to print brief system info

ROOT_ID="0"

DATE=`date`
NO_USERS=`who | wc -l`
UPTIME=`uptime`

check_root(){
    if [ "$UID" -ne "$ROOT_ID" ]; then
        echo "You are not allowed to execute this program!"
        exit 1;
   fi    
}

print_sys_info(){
    echo "System Time    : $DATE"
    echo "Number of users: $NO_USERS"
    echo "System Uptime  : $UPTIME
}

check_root
print_sys_info

exit 0

Ajiye fayil ɗin kuma a kira shi azaman tushen kuma yi ɗan duban tsarin aiki:

$ sudo bash -n sys_info.sh

Sakamakon binciken aikin mu na sama har yanzu yana nuna cewa akwai ƙarin bug guda ɗaya a cikin rubutun mu akan layi na 21. Don haka, har yanzu muna da wasu gyare-gyaren syntax da za mu yi.

Idan muka sake duba rubutun cikin nazari sau ɗaya, kuskuren akan layi na 21 ya faru ne saboda ɓacewar ƙima biyu na rufewa (”) a cikin umarnin echo na ƙarshe a cikin aikin print_sys_info .

Za mu ƙara ƙididdiga biyu na rufewa a cikin umarnin echo kuma mu adana fayil ɗin. Rubutun da aka canza yana ƙasa:

#!/bin/bash
#script to print brief system info

ROOT_ID="0"

DATE=`date`
NO_USERS=`who | wc -l`
UPTIME=`uptime`

check_root(){
    if [ "$UID" -ne "$ROOT_ID" ]; then
        echo "You are not allowed to execute this program!"
        exit 1;
    fi
}

print_sys_info(){
    echo "System Time    : $DATE"
    echo "Number of users: $NO_USERS"
    echo "System Uptime  : $UPTIME"
}

check_root
print_sys_info

exit 0

Yanzu syntactically duba rubutun sau ɗaya.

$ sudo bash -n sys_info.sh

Umurnin da ke sama ba zai samar da wani fitarwa ba saboda rubutun mu yanzu daidai yake. Hakanan zamu iya gano aiwatar da rubutun duka a karo na biyu kuma yakamata yayi aiki da kyau:

$ sudo bash -x sys_info.sh

Yanzu gudanar da rubutun.

$ sudo ./sys_info.sh

Muhimmancin Binciken Rubutun Shell

Binciken rubutun Shell yana taimaka mana gano kurakuran ma'ana kuma mafi mahimmanci, kurakurai masu ma'ana. Dauki misali aikin check_root a cikin rubutun harsashi sys_info.sh, wanda aka yi niyya don tantance idan mai amfani ya kasance tushen ko a'a, tunda rubutun kawai an yarda a aiwatar da shi. ta superuser.

check_root(){
    if [ "$UID" -ne "$ROOT_ID" ]; then
        echo "You are not allowed to execute this program!"
        exit 1;
    fi
}

Sihiri a nan ana sarrafa shi ta hanyar in sanarwa furcin [ \$UID\ -ne \$ROOT_ID\ ], da zarar ba mu yi amfani da ma'aikacin lamba da ya dace ba. (-ne a cikin wannan yanayin, wanda ke nufin ba daidai ba ), za mu ƙare da yiwuwar kuskuren ma'ana.

Idan muka ɗauka cewa mun yi amfani da -eq (yana nufin daidai), wannan zai ba kowane mai amfani da tsarin da tushen mai amfani damar gudanar da rubutun, don haka kuskuren ma'ana.

check_root(){
    if [ "$UID" -eq "$ROOT_ID" ]; then
        echo "You are not allowed to execute this program!"
        exit 1;
    fi
}

Lura: Kamar yadda muka duba a baya a farkon wannan silsilar, umarnin da aka gina harsashi yana iya kunna gyara kuskure a wani sashe na rubutun harsashi.

Don haka, layin da ke ƙasa zai taimaka mana gano wannan kuskuren ma'ana a cikin aikin ta hanyar gano yadda ake aiwatar da shi:

Rubutun tare da kuskuren ma'ana:

#!/bin/bash
#script to print brief system info

ROOT_ID="0"

DATE=`date`
NO_USERS=`who | wc -l`
UPTIME=`uptime`

check_root(){
    if [ "$UID" -eq "$ROOT_ID" ]; then
        echo "You are not allowed to execute this program!"
        exit 1;
    fi
}

print_sys_info(){
    echo "System Time    : $DATE"
    echo "Number of users: $NO_USERS"
    echo "System Uptime  : $UPTIME"
}

#turning on and off debugging of check_root function
set -x ; check_root;  set +x ;
print_sys_info

exit 0

Ajiye fayil ɗin kuma ku kira rubutun, zamu iya ganin cewa mai amfani da tsarin na yau da kullum zai iya gudanar da rubutun ba tare da sudo ba kamar yadda yake a cikin fitarwa a ƙasa. Wannan saboda darajar USER_ID 100 ne wanda bai kai tushen ROOT_ID ba wanda shine 0.

$ ./sys_info.sh

To, shi ke nan a yanzu, mun zo ƙarshen jerin gyara rubutun harsashi, za a iya amfani da fom ɗin amsa da ke ƙasa don magance kowace tambaya ko ra'ayi a gare mu, dangane da wannan jagorar ko kuma gabaɗayan jerin kashi 3.