寫給linux Shell程式初學者

2021-05-24 04:32:42 字數 1675 閱讀 2755

在*nix系統啟動最後階段將呼叫乙個非互動的shell程式,然後在shell程式裡啟用圖形客戶端程式,如果選擇不啟用圖形客戶端,則在系統啟動最後階段將呼叫乙個

互動的shell程式。

互動shell又包括登陸shell與非登陸shell,登陸shell指的是以bash --login(以下所有shell程式都以bash為例)方式啟動的,比如我們常用的ssh方式啟動的shell就是此

種方式(如果我們預設以csh啟動,在比如.cshrc配置檔案的最後又以bash方式啟動,這就是非登陸shell,或以bash --login方式啟動,這卻是登陸shell方式)。

非互動shell指的是以shell指令碼形式啟動。

講清楚以上的問題主要是為了說明,登陸shell預設配置檔案是.bash_profile .bash_logout等,非登陸shell預設配置檔案是.bashrc。非互動shell沒有預設配置檔案。

主要目的是為了說明不同的shell可能存在的區別,比如hp unix預設shell是csh,ubuntu linux預設shell是bash。這兩種shell在編寫指令碼方式上是有區別的。

比如:csh有setenv命令,而bash有export命令,csh沒有for,但有foreach,csh管道可以這樣寫|&,csh if 這樣寫if ($update_flag) then ...,而bash是這樣寫的if [ $update_flag -eq 1 ];then ...。

講清楚以上的問題主要是為了說明,在實際編寫shell程式時首先要確定是為哪種shell直譯器寫的,因為不同shell直譯器shell程式寫法是有區別的。

4.1 首行寫法,有三種,第一種是#!/bin/bash,第二種是#!/usr/bin/env bash 這種寫法主要是由*nux系統自帶的env程式來定位bash程式的位置,這樣利於shell程式移

植。第三種是不以#!開頭的,則以當前使用者預設登陸shell來執行此shell指令碼。

4.2 會用if for while until case 函式等。

4.3 理解pwd及dirname對於shell編寫的重要性,其中dirname對於相對路徑執行shell作用很大。

4.4 理解使用*nix系統重要的工具命令的用法,如grep du df find expr let set sed awk等,以下舉例說明:

比如計算當前目錄的使用硬碟空間:

du -b --max-depth=0

統計**行:

var=`find . -name "*.cpp" -o -name "*.h"`;for i in $var;do wc -l $i|sort -rn|awk '}';done

取錯誤日誌部分前後20行

var=`grep -in "error" build.log|awk -f: ''`;for i in $var;do head -n `expr $i + 10` build.log|tail -n 20;done

4.5 要理解*nix系統很多命令用法都是帶有pattern及action的。

比如awk命令 awk '$1>100'這個只有pattern

awk '' 這個只有action

awk '$1>100 ' 這個有pattern 和 action

如如find命令 find . -ls 這個有pattern 及 action,預設action 為-print

待續。。。

linux shell 監測程式

一。探查程序 ps 在預設情況下只顯示執行在當前控制台下的當前使用者的程序。linux 下支援3個不同型別的命令引數 1.unix風格,前面加單破折線 2.bsd風格,前面不加破折線 3.gun風格,前面加雙破折線 unix a 顯示的所有程序 n 顯示與引數不符的所有程序 d 顯示除控制程序外的所...

Linux Shell 程式除錯

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

編寫LinuxShell程式1

bash 井號是起注釋作用的 rm f f是強制刪除的意思 ps 是顯示當前前台程序狀態 ps e 是顯示當前所有程序狀態 前台和後台全部都在 ls l 是顯示當前目錄下所有檔案的讀寫許可權 剛剛創立的shell指令碼是不能執行的,有兩種方式可以執行,1.使用shell工具進行解析 2.修改指令碼的...