linux--shell指令碼筆記之一。

來源:互聯網
上載者:User

標籤:應用程式   linux   使用者   種類   

shell指令碼(1)

  Shell指令碼是一個特殊的應用程式,負責接收使用者輸入的操作命令並進行解釋,將需要執行的操作傳遞給核心執行,並輸出執行結果。可以在/etc/shells檔案查看當前系統所支援的shell種類。

[[email protected]~]# cat /etc/shells

/bin/sh

/bin/bash

/sbin/nologin

/bin/tcsh

/bin/csh                                                                                                         

/bin/ksh

其中/bin/bash是目前大多數linux版本採用的預設shell,全稱為Bourne AgainShell

 

指令碼的二種執行方法

一、./first.sh     這種執行方法需要給first.sh指令碼一個執行許可權:chomod+x first.sh

二、sh /first.sh      這種執行方法不需要給first.sh指令碼執行許可權,也可通過Source“.”執行

         . first.sh 或者source/first.sh (中間都是有空格的)

  重新導向與管道操作

標準輸入(STDIN):預設:鍵盤 檔案編號為0

標準輸出(STDOUT):預設:顯示器 檔案編號為1

標準錯誤(STDERR):預設:顯示器 檔案編號為2

重新導向輸出>和>>分別是覆蓋和追加重新導向

重新導向輸入<

重新導向輸入可用於給使用者建立密碼

[[email protected]~]#vim shelltest/useradd

123456

:x

 

[[email protected]~]# passwd --stdin jerry <shelltest/useradd

Changingpassword for user jerry.

passwd:all authentication tokens updated successfully.

這樣可以省去建立密碼時多次輸入密碼。

錯誤重新導向2>和2>>是覆蓋和追加重新導向

當一個命令即包括錯誤輸出和標準輸出時可以用&>把標準和錯誤輸出到一個檔案裡

如自動編譯安裝httpd時要把make  make install操作全部指向/dev/null

[[email protected]~]# vim httpd.sh

#!/bin/bash

#httpdshell install

cd/var/ftp/pub/httpd-2.2.17/

./config--prefix=/usr/local/httpd --enable-so &>/dev/null

make&>/dev/null

makeinstall $>/dev/null

.....以下省略

執行這個指令碼後編譯安裝時會把輸出的檔案全部指向/dev/null下。

管道符“ | ”位於管道符左側的命令輸出的結果,將作為右側命令的輸入。

如查看用“/bin/bash”作為shell的使用者名稱稱時可以用awk命令進一步過濾,只顯示使用者名稱和登入shell列

過濾前會顯示整行內容

[[email protected]~]# grep "/bin/bash$" /etc/passwd

root:x:0:0:root:/root:/bin/bash

jerry:x:500:500::/home/jerry:/bin/bash

過濾後只顯示使用者名稱和登入shell

[[email protected]~]# grep "/bin/bash$" /etc/passwd | awk -F: ‘{print$1,$7}‘

root/bin/bash

jerry/bin/bash

上列中awk的作用是以:為分隔字元輸出第1列和第7列內容,-F是指定分隔字元,可為文檔中的任一字元,預設以空格或定位字元分隔(大括弧裡的內容要用單引號)。

 

使用shell變數

常用的shell變數包括:自訂變數、環境變數、預定義變數、位置變數。

自訂變數是由系統使用者自己定義的變數,只在使用者自己的shell環境中有效,所以又稱做本地變數。

定義變數的基本格式為“變數名=變數值”,等號兩邊沒有空格。變數名稱需要以字母或底線開頭,名稱中不要包含特殊字元。

自訂變數如下:

[[email protected] ~]# system=centos

[[email protected] ~]# version=6.5

查看時用echo回顯,變數名前要加上$符號

[[email protected] ~]# echo $system

centos

[[email protected] ~]# echo $system $version

centos 6.5

回顯變數名時如果後邊有其它字元需要添加大括弧“{}”將其包圍起來,否則將無法確定正確的變數名稱。未定義的變數,將顯示為空白值。

[[email protected] ~]# echo $system6.5         #因未定義$system6所以只顯示.5變數值為空白

.5

[[email protected] ~]# echo ${system}6.5

centos6.5

變數賦值的特殊操作

在等號後邊直接指定變數內容是為變數賦值的最基本方法,除此以外還有一些特殊的賦值操作,可以靈活地賦值變數,以便適用於複雜的管理工作。

1.雙引號(“”)

比如我們在賦值一個內容裡包含空格時,必須用雙引號括起來,如下

[[email protected] ~]# Centos=Centos6.5  錯誤的賦值提示沒有這個命令

-bash: 6.5: command not found

[[email protected] ~]#Centos="Centos 6.5"

[[email protected] ~]# echo $Centos

Centos 6.5

2.($)符號

        在雙引號範圍內,使用“$”符號可以引用其它變數的值,如下

[[email protected] ~]# redhat="red hat$version"

[[email protected] ~]# echo $redhat

red hat 6.5

3.單引號(’)

         當要賦值的內容中包含$、“、\等具有特殊含義的字元時,應使用單引號括起來,經單引號的範圍內,將無法引用其他變數值,任何字元當做一般字元看待,但賦值的內容中包含單引號時,需要用“\”符號進行轉義,以免衝突。如下

[[email protected] ~]# redhat=‘red hat $version‘

[[email protected] ~]# echo $redhat

red hat $version

4.反撇號(`)

         反撇號主要用於命令替換,允許將執行某個命令的螢幕輸出結果賦值給變數,反撇號括起來的範圍內必須是能夠執行的命令列,否則會出錯。如下

[[email protected] ~]# ls -ld `which service`

-rwxr-xr-x 1 root root 1744 2009-07-13/sbin/service

如上述命令相當於先執行which service然後查看檔案屬性相當於連續執行了兩條命令。

但是使用反撇號不能在一行命令中實現嵌套命令替換操作,這時可以用“$()”來代替反撇號,以解決嵌套問題,如查看useradd命令程式的軟體包安裝的設定檔在什麼位置,如下

[[email protected] ~]# rpm -qc $(rpm -qf $(whichuseradd))

/etc/default/useradd

/etc/login.defs

5.read命令

         Read命令是用來提示使用者輸入資訊,從而實現簡單的互動過程,將使用者輸入的內容賦值給指定的變數,多餘的內容賦值給最後一個變數,若指定的變數只有一個,則將整行內容賦值給此變數。如下操作會等待使用者輸入,並將使用者輸入內容賦值給變數

[[email protected] ~]# read dir

/opt/backup

[[email protected] ~]# echo $dir

/opt/backup

         Read命令還可以結合”-p”選項來設定提示資訊,如下

[[email protected] ~]# read -p "請指定備份的存放目錄:" dir

請指定備份的存放目錄:/opt/backup/

[[email protected] ~]# echo $dir

/opt/backup/

之前說過自訂變數都只能在自己的shell裡才能用稱為局部變數,其實我們可以把局部變數變為全域變數。如下。

[[email protected] ~]# echo "$system$version"

centos 6.5

[[email protected] ~]# export system version   #設定為全域變數

[[email protected] ~]# bash                 #進入子shell環境

[[email protected] ~]# echo "$system$version"       

centos 6.5

export也可以在建立變數時直接建立為全域變數如下

[[email protected] ~]# exportfqnd="www.baidu.com"

[[email protected] ~]# bash

[[email protected] ~]# echo $fqnd

www.baidu.com

5.數值變數運算

Expr用於shell裡簡單的整數運算

運算子與變數之間至少要有一個空格。

expr 變數1 運算子 變數2 [運算子 變數3]……

運算子包括以下幾種

+:加法                     -:減法          \*:乘法       /:除法         %:取餘運算

如x=5 y=3

[[email protected] ~]# x=5

[[email protected] ~]# y=3

[[email protected] ~]# expr        $x    %       $y

2

特殊變數之環境變數

環境變數指的是出於運行需要由linux系統提前建立的一類變數,主要用於設定使用者的工作環境,如宿主目錄,命令尋找路徑,使用者目前的目錄等。使用env可以查看當前工作環境下的環境變數。

[[email protected] ~]# env |more

HOSTNAME=localhost.localdomain

version=6.5

TERM=linux

SHELL=/bin/bash

HISTSIZE=200

KDE_NO_IPV6=1

……………..省略

 

PATH是用於設定可執行程式的預設搜尋路徑。如first.sh在/root/下可用PATH添加,如下

[[email protected] ~]#PATH="$PATH:/root"

[[email protected] ~]# echo $PATH

/usr/lib/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root

 

在Linux中環境變數的全域設定檔在/etc/profile,在此檔案中定義的變數作用於所有使用者,而每個使用者還有自己獨立的設定檔(~/.bash_profile),如變更曆史命令由1000改為20,

[[email protected] ~]#vim /etc/profile

……//省略

HISTSIZE=20

[[email protected] ~]# source /etc/profile          使其配置生效

[[email protected] ~]# history |wc –l         

20

特殊變數之位置變數

位置變數當執行命令指令碼時,第一個欄位表示命令名或指令碼名,其餘字串參數從左至右的順序依次賦值給位置變數,如下

[[email protected] ~]# vi export.sh

#!/bin/bash

########位置變數運算指令碼#######

SUM=`expr $1 \* $2`

echo "$1 \* $2 = $SUM"

[[email protected] ~]# sh expr.sh 5 6

5 \* 6 = 30

特殊變數之預定義變數

預定義變數是程式以經定義好的變數,使用者不能手動建立也不能直接賦值給預定義變數

常見預定義變數

$#:表示命令列中位置參數的個數

$*:表示所有位置參數的內容

$?:表示上一條命令執行後的狀態,返回0為正確其它值均為異常

$0:表示當前執行的指令碼或程式名稱

 


本文出自 “癮” 部落格,請務必保留此出處http://luoyuxiangnian.blog.51cto.com/6214813/1550510

linux--shell指令碼筆記之一。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.