課外拓展五

2021-10-05 13:28:41 字數 1862 閱讀 6650

執行shell

使用者可以用任何編輯程式來編寫shell程式,因為shell程式是解釋執行的,所以不需要編譯裝配成目標程式。按照shell程式設計的慣例,以bash為例,程式的第一行一般為「#!/bin/bash」,其中#表示該行是注釋,符號「!」告訴shell執行「!」之後的命令並用檔案的其餘部分作為輸入,也就是執行/bin/bash並讓/bin/bash去執行shell程式的內容。

執行shell程式的方法有三種:

(1)sh shell程式檔名。這種方法的命令格式為

bash shell程式檔名

這實際上是呼叫乙個新的bash命令解釋程式,而把shell程式檔名作為引數傳遞給它。新啟動的shell將去讀指定的檔案,執行檔案中列出的命令,當所有的命令都執行完結束。該方法的優點是可以利用shell除錯功能。

(2)sh。格式為

bash

這種方式就是利用輸入重定向,使shell命令解釋程式的輸入取自指定的程式檔案。

(3)用chmod命令使shell程式成為可執行的。乙個檔案能否執行取決於該檔案的內容本身可執行且該檔案具有執行權。對於shell程式,當用編輯器生成乙個檔案時,系統賦予的許可許可權都是「644(rw-r-r–)」,因此,當使用者需要執行這個檔案時,只需要直接鍵入檔名即可。

在這三種執行shell程式的方法中,最好按下面的方式選擇:當剛建立乙個shell程式,對它的正確性還沒有把握時,應當使用第一種方式進行除錯;當乙個shell程式已經除錯好時,應使用第三種方式把它固定下來,以後只要鍵入相應的檔名即可,並可被另乙個程式呼叫。

bash程式的除錯

在程式設計過程中難免會出錯,有時除錯程式比編寫程式花費的時間還要多,shell程式同樣如此。

shell程式的除錯主要是利用bash命令解釋程式的選擇項。呼叫bash的形式為

bash -選擇項shell程式檔名

幾個常用的選擇項如下。

-e:如果乙個命令失敗就立即退出。

-n:讀入命令但是不執行它們。

-u:置換時把未設定的變數看作出錯。

-v:當讀入shell輸入行時把它們顯示出來。

-x:執行命令時把命令和它們的引數顯示出來。

上面的所有選項也可以在shell程式內部用「set -選擇項」的形式引用,而「set +選擇項」則將禁止該選擇項起作用。如果只想對程式的某一部分使用某些選擇項時,則可以將該部分用上面兩個語句包圍起來。

1.未置變數退出和立即退出

未置變數退出特性允許使用者對所有變數進行檢查,如果引用了乙個未賦值的變數就終止shell程式的執行。shell通常允許未置變數的使用,在這種情況下,變數的值為空。如果設定了未置變數退出選擇項,則一旦使用了未置變數就顯示錯誤資訊,並終止程式的執行。未置變數退出選擇項為「-u」。

當shell執行時,若遇到不存在或不可執行的命令、重定向失敗或命令非正常結束等情況時,如果未經重新定向,該出錯資訊會列印在終端螢幕上,而shell程式仍將繼續執行。要想在錯誤發生時迫使shell程式立即結束,可以使用「-e」選項將shell程式的執行立即終止。

2.shell程式的跟蹤

除錯shell程式的主要方法是利用shell命令解釋程式的「-v」或「-x」選項來跟蹤程式的執行。「-v」選擇項使shell在執行程式的過程中,把它讀入的每乙個命令列都顯示出來,而「-x」選擇項使shell在執行程式的過程中把它執行的每乙個命令在行首用乙個「+」加上命令名顯示出來,並把每乙個變數和該變數所取的值也顯示出來,因此,它們的主要區別在於:在執行命令列之前無「-v」則列印出命令列的原始內容,而有「-v」則列印出經過替換後的命令列的內容。

除了使用shell的「-v」和「-x」選擇項以外,還可以在shell程式內部採取一些輔助除錯的措施。例如,可以在shell程式的一些關鍵地方使用echo命令把必要的資訊顯示出來,它的作用相當於c語言中的printf語句,這樣就可以知道程式執行到什麼地方及程式目前的狀態。

課外練習4 2

第一題 任意輸入乙個int整數,顯示為32位二進位制值 我的 include using namespace std intmain return0 輸入樣例 3輸出樣例 5我的 include using namespace std intmain if flag return0 第三題 程式設計...

oracle課外練習3

create table sporter sporterid number,name varchar2 20 varchar2 5 department varchar2 20 insert into sporter values 1001,李盼 女 計算機系 insert into sporter...

課外練習6 1答案

第一題 先讀入n n 100 再讀入n個整數,計算其最大的一段的和,輸出該段的和以及起始下標和終止下標 下標從0開始 例如輸入 8 4 5 7 6 9 5 5 9 輸出 15 1,4 正解 暴力列舉 思想 列舉出陣列的所有子陣列的和即可。輔助函式 計算一段陣列的值的函式 例如 int arr 計算a...