Linux Shell編程筆記

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/luowangcan/article/details/56835821

一,前言

摘抄自《Shell腳本學習指南中文PDF版》

Shell腳本最常用於系統管理工作,或者用於結合現有的程序以完成小型的、特定的工作。一旦你找出完成工作的方法,可以把用到的命令串在一起,放在一個獨立的程序或script中。腳本編程語言與編譯型語言區別在於腳本編程語言通常是解釋型的,這類程序的執行,是有解釋器讀入程序代碼,而編譯型語言則是編譯執行,將源代碼轉換成目標代碼,便可以直接執行,使用腳本語言的好處是,它們多半運行在比編譯型語言還高的層級,能夠輕易處理文件與目錄之類的對象,缺點是執行效率通常不如編譯型語言。

二,初識Shell編程

Shell的基本概念

2.1 shell命令

一個簡單的Shell命令,如“mkdir dir1 dir2 dir3 dir4” 由命令本身、參數和空格構成

複雜的Shell命令是由簡單的命令以多種方式組織在一起的,例如,管道把一個命令的輸出傳遞給另外一個命令作爲輸入、循環或條件結構,如:

cat book_to_read | grep "english" > mybook

該命令通過管道把cat命令的輸出送給grep作爲輸入。grep命令在輸入字符串中查找子字符串english,通過重定向把所有包含字符串english的行寫入到mybook文件中
下面附上一個簡單的Shell腳本,建立hello文件,文件內容如下:

#!/bin/bash
#the simple case -hello world
echo Hello World

爲了使當前文件有可執行的權限,輸入以下命令:

sh hello
chmod u+x hello

運行腳本文件,如下圖所示:
執行腳本文件

腳本內容解釋:#!說明這個文件類型的,Linux 系統根據#!及該字符串後面的信息確定該文件的類型,在#!之後是一個路徑名,這個路徑名指定了一個解釋腳本中命令的程序,“/bin/BASH”就表明該文件是一個BASH程序 ,需要由/bin下的BASH程序來解釋運行。#表示註釋,echo語句的功能就是把echo後面的字符串輸出到標準輸出中。

2.2 Shell語法

如果輸入沒有被註釋掉,那麼Shell將讀取該輸入並且把它分割成字(word)和操作符,然後引用規則來定義輸入的每個字符的意義。

2.3 Shell擴展

Shell擴展在每個命令行被分割成記號(tokens)後運行。

2.4 重定向

在一個命令運行之前,它的輸入和輸出可能會重定向爲使用一個由Shell解釋的特殊符號。

2.5 Shell函數

Shell函數是一種具有特定功能的一系列語句(命令)的集合,像普通命令一樣運行。事實上,BASH在運行腳本的時候,若發現一個函數的定義,則它將函數保留,並作爲一條命令,在後面遇見該函數名時,便直接運行該函數,所以函數需要先定義,再調用。

2.6 Shell變量

Shell變量是一個存儲值的實體,就是一個存儲了名字的參數,引用變量用 STR,但是更爲標準的是${STR}。BASH中的變量可以不被定義直接使用的,所以也就沒有類型之說,一個變量既可以被定義爲字符串,也可以被再定義爲整數。

2.7 Shell腳本

Shell腳本與Windows下的批處理類似,就是一堆命令的集合,方便一次性運行的程序文件。

三,判斷和遞歸

3.1 判斷的用法

判斷的語法由if、elif、then、fi所構成,示例如下:

#!/bin/bash

if [ $1 -eq 1 ]; then
        echo "yes 1"
elif [ $1 -eq 2 ]; then
        echo "yes 2"
else
        echo "no"

fi

這是簡單的判斷決定輸出,運行結果如下:
這裏寫圖片描述

3.2 循環的用法

在Shell腳本中使用的循環有case、for、while和until,這裏介紹for和while這兩個循環

while語法


while [ 條件 ] ;
do
命令或動作
done

上面的中括號[]中的條件不能和括號連在一起,而必須加上空格。下面附上一個示例:

#!/bin/bash

echo "please input n to computer 1+2+....+n"
read -r n

x=1
sum=0
while [ $x -le $n ];
do
        sum=`expr $sum + $x`
        x=`expr $x + 1`
done
echo "sum=" $sum

在Shell腳本中,所有的變量都是文字形態,因此要作爲數值使用,必須要加上expr變量,而且表達式必須加上反引號。在本示例中用read -r 讀取輸入變量n,-le表示數值的小於或等於。

for語法


for item in list
do
    命令或動作
done    

示例,判斷當前目錄下的所有對象是一般文件還是文件夾:

#!/bin/bash

for ff in *;
do
        if [ -f $ff ];then
                echo "$ff is a file"
        elif [ -d $ff ];then
                echo "$ff is a directory"
        else
                echo "$ff is not a file , not a directory"
        fi
done

資料來源《Linux指令與Shell編程編程範例速查手冊》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章