SHEll編程基礎(chǔ)

一、SHELL編程的格式

首行shebang機(jī)制,指定解釋器,這里我們主要使用第一個(gè)
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl

二、 SHELL的運(yùn)行的三種方法

1. 作為可執(zhí)行程序執(zhí)行

  • 新的腳本都沒有可執(zhí)行權(quán)限,所以要先給執(zhí)行權(quán)限。
[root@centos7 test]# chmod a+x aubin.sh 
  • 先切換到當(dāng)前路徑,或者直接使用絕對路徑執(zhí)行。
[root@centos7 test]# ./aubin.sh 
helo world
[root@centos7 test]# /app/test/aubin.sh 
helo world

在當(dāng)前路徑執(zhí)行的話一定要寫./aubin.sh 。如果直接寫aubin.sh系統(tǒng)會在PATH路徑中搜索aubin.sh。當(dāng)然是根本找不到的,系統(tǒng)會報(bào)出錯(cuò)誤。你也可以將當(dāng)前路徑加入到PATH中,但是這種做法通常會引起其他錯(cuò)誤,所以不推薦將當(dāng)前路徑寫到PATH中。


2. 指定解釋器執(zhí)行

直接通過bash解釋器去調(diào)用腳本,因?yàn)閎ash擁有執(zhí)行權(quán)限,所以他去調(diào)用腳本時(shí)不關(guān)心腳本本身有沒有執(zhí)行權(quán)限。

[root@centos7 test]# bash aubin.sh                  #如果bash在PATH中,直接執(zhí)行即可
helo world
[root@centos7 test]# /bin/bash aubin.sh             #否則就需要指定bash指定路徑
helo world

3. source執(zhí)行---不推薦

soruce 就是 點(diǎn)。常用于重新執(zhí)行剛修改的初始化文件。如/etc/profile , bash_profile, bashrc通過 source命令 在不重啟的情況下生效。

[root@centos7 test]# source aubin.sh 

4. 三者區(qū)別

直接執(zhí)行需要權(quán)限。bash與source不需要權(quán)限。
直接執(zhí)行與bash會在子進(jìn)程執(zhí)行腳本,source會在當(dāng)前進(jìn)程執(zhí)行。會影響當(dāng)前操作環(huán)境


三、 檢查代碼中的語法錯(cuò)誤

#檢測腳本中的語法錯(cuò)誤
bash -n /path/to/some_script
#調(diào)試執(zhí)行
bash -x /path/to/some_script

四、 變量的類型

  • 本地變量
    僅對當(dāng)前shell有效,其他進(jìn)程包括子進(jìn)程均無效
  • 環(huán)境變量
    僅對當(dāng)前shell與子進(jìn)程有效??梢岳^承,無法回傳(子進(jìn)程-->父進(jìn)程)。
    若父進(jìn)程注銷變量后,子進(jìn)程無法繼承。
  • 局部變量
    僅對當(dāng)前shell中局部代碼段有效
  • 位置變量
    $1 $2...... 用于調(diào)用腳本時(shí)傳入的參數(shù)

1. 本地變量

  • 可以是直接字串; name=“root"
  • 變量引用:name="$USER"
  • 命令引用:name=`COMMAND` name=$(COMMAND)
  • 刪除變量:unset name
  • " ":弱引用,其中的變量引用會被替換為變量值。
  • ' ':強(qiáng)引用,其中的變量引用不會被替換為變量值,而保持原字符串。

2. 環(huán)境變量

  • 環(huán)境變量的定義
export name=VALUE
declare -x name=VALUE
  • 查看所有環(huán)境變量
[root@centos7 test]env
[root@centos7 test]printenv
[root@centos7 test]export                               #↓等價(jià)
[root@centos7 test]declare -x                           #↑等價(jià)

3. 只讀變量與位置變量

  • 只讀變量的聲明與查看
readonly name                                           #聲明只讀變量
declare -r nam                                          #聲明只讀變量
readonly –p                                             #查看只讀變量
  • 位置變量
$1, $2, ...:對應(yīng)第1、第2等參數(shù),shift [n]換位置
$0: 命令本身
$*: 傳遞給腳本的所有參數(shù),全部參數(shù)合為一個(gè)字符串
$@: 傳遞給腳本的所有參數(shù),每個(gè)參數(shù)為獨(dú)立字符串
$#: 傳遞給腳本的參數(shù)的個(gè)數(shù)
       $@ $* 只在被雙引號包起來的時(shí)候才會有差異
set -- 清空所有位置變量

五、 退出狀態(tài)

進(jìn)程使用退出狀態(tài)來報(bào)告成功或失敗

  • 0 代表成功,1-255代表失敗
  • $? 變量保存最近的命令退出狀態(tài)
    例子:不查看過程,只查看結(jié)果。
ping -c1 -W1 hostdown &> /dev/null
echo $?
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容