歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

寫給Linux Shell編程初學者

1 首先說下shell對於*nix(unix/linux的統稱)系統的作用

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

交互的shell程序。

2 解釋下交互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沒有默認配置文件。

3 簡單說明下不同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 開始基礎說下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 '{if ( $1 > 5000 ) {print $0}}';done

取錯誤日志部分前後20行

var=`grep -in "error" build.log|awk -F: '{print $1}'`;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 '{print $1}' 這個只有action

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

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

Copyright © Linux教程網 All Rights Reserved