shell程式設計規範與變數

sarynsuo發表於2021-01-03

shell程式設計規範與變數

一、Shell指令碼概述

1.1 Shell的作用-1

■ shel的作用—命令直譯器,“翻譯官”

介於系統核心與使用者之間,負責解釋命令列
在這裡插入圖片描述

1.2 Shell的作用-2

■ 使用者的登入Shell

登入後預設使用的shell程式,一般為/bin/bash
不同shell的記憶體指令、執行環境等會有所區別

[root@localhost -]# cat /etc/shells 
/bin/sh 
/bin/bash 
/sbin/nologi

1.3 編寫第一個shell指令碼-1

■ 編寫指令碼程式碼

使用vim文字編輯器
每行—條Linux命令,按執行順序依次編寫

[root@localhost  ]# vim first.sh 
cd /boot/ 
pwd 
Is -Ih vml*

■ 賦予可執行許可權

使指令碼具有可執行屬性

 [root@localhost -]# chmod +x first.sh

1.4 編寫第一個shell指令碼-2

■ 執行指令碼檔案

方法指令碼檔案路徑(絕對路徑與相對路徑)

[root@ local host  ]# ./first.sh

方法二:sh指令碼檔案路徑

[root@localhost] # sh first.sh

方法三:source指令碼檔案路徑

[root@localhost] # source first.sh

1.5 編寫第一個shell指令碼-3

■ 更完善的指令碼構成

指令碼宣告
註釋資訊
可執行語句

[root@localhost  ]# vim /first.sh 
#!/bin/bash 
# This is my first Shell-Script, 
cd /boot 
echo "當前的目錄位於:" 
pwd 
echo "其中以vml開頭的檔案包括: Is -lh vml*

1.6 重定向與管道操作-1

■ 互動式硬體裝置

標準輸入:從該裝置接收使用者輸入的資料
標準輸出:通過該裝置向使用者輸出資料
標準錯誤:通過該裝置報告執行出錯資訊
在這裡插入圖片描述
1.7 重定向與管道操作-2
■ 重定向操作
在這裡插入圖片描述
1.8 重定向與管道操作-3
■ 重定向操作
在這裡插入圖片描述
1.9 重定向與管道操作-4
■ 管道操作符號"|"

將左側的命令輸出結果,作為右側命令的處理物件

cmd | cmd2 [... | cmdn]

[root@localhost -]# grep "bash$" /etc/passwd 
root:x:0:0:root:/root:/bin/bash 
teacher:x:500:500:BENET Linux Teacher:/home/teacher:/bin/bash 
[root@localhost ]  # grep “bash$” /etc/passwd | awk -F: ‘{print $1,  $7}’ 
root /bin/bash

二、Shell指令碼變數

2.1 Shell變數的作用、型別

■ 變數的作用

用來存放系統和使用者需要使用的特定引數(值)
變數名:使用固定的名稱,由系統預設或使用者定義
變數值:能夠根據使用者設定、_系統環境的變化而變化
■ 變數的型別
自定義變數:由使用者自己定義、修改和使用
特殊變數:環境變數,只讀變數,位置變數,預定義變數

2.2 自定義變數-1

■ 定義一個新的變數

變數名以字母或下劃線開頭,區分大小寫,建議全大寫
■ 檢視變數的值

echo $變置名

[root@localhost ~]# Products Python 
[root@ local host ~]# Version=2.7.13 
[root@localhost ~]# echo $Product 
Python 
[root@ local host ~]# echo $Product $Version Python 2.7.13

2.3 自定義變數-2

■ 賦值時使用引號

雙引號:允許通過 符 號 引 用 其 他 變 量 值 單 引 號 : 禁 止 引 用 其 他 變 量 值 , 符號引用其他變數值 單引號:禁止引用其他變數值, 視為普通字元
反撇號:命令替換,提取命令執行後的輸出結果
■ 從鍵盤輸入內容為變數賦值

read [-p "提示資訊"]變數名

2.4 自定義變數-3

■ 設定變數的作用範圍

格式1: export變數名… 
格式2: export變置名=變置值...
[root@localhost  -]#  echo  "SProduct  $Version’ Benet 6.0 
[root@localhost   ]  #  export  Product  Version 
[root@localhost ~j# basK? 
[root@localhost  ~j#  echo  "SProduct  $Version Benet 6.0

2.5 自定義變數-4

■ 整數變數的運算

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

■ 常用運算子

加法運算:+
減法運算:_
乘法運算:*
除法運算:/
求模(取餘)運算:%

2.6 特殊的Shell變數-1

■ 環境變數

由系統提前建立,用來設定使用者的工作環境
配置檔案:/etc/profile、 /.bash—profile
■ 常見的環境變數

PWD、 PATH
USER、SHELL、 HOME

[root@localhost  ]# echo $PATH 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin:/root/bin 
[root@localhost  ]# PATH="$PATH:/root" 
iroot@localhost  j# echo $PATH 
/usr/local/sbin:/usr/local/bin:/usr/^in:/usr/bin:/root/bin:/usr/local/mysql/bin:/root/bin:/root 

2.7 特殊的Shell變數-2

■ 只讀變數

用於變數值不允許被修改的情況

[root@localhost -]# name=cloud 
[root@localhost -]# readonly name //設定為只讀變數 
[root@localhost ~j# echo $name 
cloud 
[root@localhost  ]  # name=yun 
-bash: name: readonly variable //只讀變數不可以被重新賦值 [root@localhost~]# 
[root@localhost -]# unset name //只讀變數不可以被刪除 
-bash: unset: name: cannot unset: readonly variable

2.8 特殊的Shell變數-3

■ 位置變數

表示為$n,n為1-9之間的數字

[root@localhost  ]# ./myprog.sh one two three four five

2.9 特殊的Shell變數-4

■ 預定義變數

$#:命令列中位置變數的個數
$*:所有位置變數的內容
$?:上一條命令執行後返回的狀態,當返回狀態值為o時 表示執行正常,非o值表示執行異常或出錯
$0:當前執行的程式/程式名
■ 預定義變數

[root@localhost -]# vim mybak.sh 
#!/bin/bash 
TARFILE=beifen-'date +%s'.tgz 
tar zcf $TARFILE $* &> /dev/null 
tcho "已執行$0指令碼,  " 
echo "共完成$#個物件的備份" 
echo  •具體內容包括: 
[root@localhost -]# chmod +x mybak.sh 
[root@localhost  ]# ./mybak.sh /etc/passwd /etc/shadow 已執行./mybak.sh指令碼, 
共完成2個物件的備份 
具體包括:/etc/passwd /etc/shadow

相關文章