第1章 shell腳本初步入門

簡介

shell是一個命令解釋器

適合用於處理純文本類型的數據

shell腳本語言是弱類型語言(無須定義變量的類型即可使用)

Unix/linux中主要有兩大類shellBourne shellC shell

[root@wangxian ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin

其他常用的腳本語言種類

PHP:更專注於web頁面開發

python:優勢在於開發較負載的運維工具軟件、web界面的管理工具和web業務的開發等

perl:比shell腳本語言強大很多,語法靈活、複雜,缺點是不易讀、團隊協作難

 

查看操作系統的shell

[root@wangxian ~]# echo $SHELL
/bin/bash
[root@wangxian ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash

shell腳本的建立和執行

shell腳本的建立

1、規範的腳本會在第一行指出由哪個程序(解釋器)來執行腳本中的內容

#! /bin/bash

#!爲幻數,內核會根據“#!”來確定該用哪個程序解釋這個腳本中的內容

這一行必須位於每個腳本頂端的第一行,如果不是第一行則爲腳本註釋

2bashsh       區別

大多數情況下,腳本開頭的#! /bin/bash#! /bin/sh沒有區別,規範的寫法開頭使用#! /bin/bash

如果使用/bin/sh執行時出現問題,再用bash試下,一般不會出現此問題

 

bash的版本、測試以及升級

[root@wangxian ~]# bash --version
GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
 
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
 
[root@wangxian ~]# env x='() { :;}; echo be careful' bash -c "echo this is a test"
this is a test

yum –y update bash

PS:如果測試沒有提示be careful,則不需要升級

centos默認的shell均爲bash

shell腳本的執行

shell腳本運行時,它會先查找系統環境變量ENV,該變量指定了環境文件(加載順序通常是/etc/profile~/.bash_profile~/.bashrc/etc/bashrc等),然後開始執行腳本中的內容

shell腳本的執行通常的幾種方式

1bash script-namesh script-name(沒有執行權限也行,推薦此方法)

2path/ script-name./ script-name:指在當前路徑下執行腳本,需要執行權限

3source script-name. script-name(也可以不需要執行權限)

使用此方法可以將sun.sh自身腳本中的變量值或函數等的返回值傳遞到當前父shell腳本father.sh中使用

4sh< script-namecat script-name|sh

 

第三種方法與其他方法不同的例子:

[root@wangxian ~]# echo 'userdir=`pwd`' >testsource.sh
[root@wangxian ~]# cat testsource.sh
userdir=`pwd`
[root@wangxian ~]# sh testsource.sh
[root@wangxian ~]# echo $userdir
 
[root@wangxian ~]# source testsource.sh
[root@wangxian ~]# echo $userdir       
/root
[root@wangxian ~]#

結論:通過source或‘.’加載執行過的腳本,由於是在當前shell中執行腳本,因此在腳本結束之後,腳本中的變量(包括函數)值在當前shell中依然存在,而shbash執行腳本都會啓動新的子shell執行,執行完後退回到父shell,因此變量值等無法保留。

shell腳本開發的基本規範及習慣

1、第一行指定解釋器

2、腳本開頭會加版本、版權、腳本的功能等信息

3、儘量不使用中文,如果要使用,調整字符集,export LANG=”zh_CN.UTF-8”

4、腳本命名  .sh擴展名

5、腳本應放在固定的路徑下

 

腳本代碼書寫習慣:

1、成對的符號應儘量一次性寫出來{} [] ‘’ “” ``

2、中括號[]兩端至少要有1個空格

3、對於流程控制語句,應一次性將格式寫完,再添加內容

一次性完成if語句的格式,應爲:

if 條件內容

  then

   內容

fi

一次性完成for循環語句的格式,應爲:

for

do

  內容

done

4、通過縮進讓代碼更易讀

5、對於常規變量的字符串定義變量值應加雙引號,並且等號前後不能有空格

需要強引用的(指所見即所得的字符引用),則用單引號(''),如果是命令的引用,則用反引號。

6、腳本中的單引號、雙引號及反引號必須爲英文狀態下的符號


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