shell程式設計

2021-08-28 15:16:39 字數 2829 閱讀 5893

一,指令碼格式要求

1,指令碼以#!/bin/bash開頭,指定解析方式

2,指令碼需要有可執行許可權

二,指令碼的常用執行方式

方式1(輸入指令碼的絕對路徑或相對路徑)

1》首先要賦予helloworld.sh指令碼的+x許可權 chmod 744 myshell.sh

2》執行指令碼 ./myshell.sh   /opt/shellscript/myshell.sh

方式2(sh+指令碼)(不推薦)

不賦予指令碼+x許可權,直接執行即可 sh myshell.sh

三 shell變數

1:系統變數和使用者變數

2:顯示當前系統中所有變數:  set

3:取出變數值 $

四 shell變數的定義

基本語法  

1,定義變數 變數=值 a=100

2.撤銷變數 unset 變數 unset a

3 宣告靜態變數 readonly 變數,無法unset   readonly a = 100

4 把變數公升級為全域性變數

五,定義變數的規則  等號兩側不能有空格 

六,1,將命令的返回值賦給變數  a=`ls -la`反引號,執行裡面的命令並把值賦給變數a

2,$(ls -la)等價於反引號

七,設定環境變數(把變數公升級為全域性變數)

基本語法 1》export 變數名=變數值 (將shell變數輸出為環境變數)

2》source 檔案 讓修改後的資訊立即生效

3》echo $變數名(查詢環境變數的值)

八,位置引數變數(獲取執行指令碼使輸入的引數)

比如 ./myshell.sh 100 200 ,100 200 就是位置引數

基本語法 $n(n為數字,0代表命令本身,$1-$9代表第一至第九個引數,十及十以上的引數,十位以上的引數需要用大括號包含,如$      $*  (這個變數代表命令列中所有的引數,$*代表把所有引數看成乙個整體)

$@  (代表命令列中所有引數,不過把每個引數區分對待)

$#  (這個變數代表命令列中所有引數的個數)

九,預定義變數,可以直接在shell指令碼中使用

$$     (當前程序的程序號)

$!    (後台執行的最後乙個程序的程序號)

$?  (最後一次執行的命令的返回狀態。如果這個變數的值為0,證明上乙個命令正確執行,如果這個變數的值非0,則證明上乙個命令執行不正確)

十,shell運算子

基本語法:

1,"$((表示式))"或"$[表示式]"(第一中形式)

2,expr m + n(第二種形式)

3 expr m - n

4 expr   \* ,/,% 乘  除  取餘

十一,條件判斷

基本語法

[ condition ](condition前後要有空格) 非空返回true 空返回false

常用判斷條件

兩個整數的比較

1)= 字串比較

-lt小於

-le 小於等於

-eq 等於

-gt 大於

-ge 等於等於

-ne 不等於

2)按照檔案許可權進行判斷

-r 有讀的許可權

-w 有寫的許可權

-x 有執行的許可權

3)按照檔案型別進行判斷

-f 檔案存在並且是乙個常規的檔案

-e 檔案存在

-d 檔案存在並且是乙個目錄

應用例項 /root/install.log檔案是否存在 判斷語句if[ -e /root/install.log ]

then echo "存在"               

fi流程控制

if判斷   

if[ condition ]then

elif[ condition2 ]then

ficase 語句

case $變數名 in

"值1")

"值2")

*)如果都不是,執行此語句

esac  反寫case結束

for迴圈

for 變數 in 值1 值2 值3                 foreach迴圈 即將值乙個個取出賦給變數  可以用$@,$*是視為乙個整體,不行

do程式

done

for((初始值;迴圈控制條件;變數變化)

dodone

$*和$@在這裡非常有用

while迴圈

基本語法

while[ condition ]

do程式

done

read讀取控制台輸入

read [選項][引數] 變數

-p 指定讀取值時的提示符

-t  指定讀取值時等待的時間,過期不候

十二,函式

basename基本語法

功能:返回完整路徑的最後/的部分,常用於獲取檔名

basename[pathname][surffix] 如果surffix指定了,那麼basename就會去掉字尾

dirname[pathname]去掉檔名返回路徑、

自由義函式

基本語法

function funname(){

sum=$[$n1 + $n2]

return $sum;

呼叫直接寫函式名

funname 1 2

十三shell定時維護

1)每天凌晨2:00備份資料庫到atguigudb到/data/backup/db

2)備份開始和備份結束能給出相應的提示資訊

3)要求以備份時間為檔名,並打包成.tar.gz的形式

4)備份的同時檢查是否有十天前的資料庫檔案,如果有就刪除

Shell程式設計 shell特性

linux會預設記錄1000條歷史記錄,可通過 echo histsize 檢視,如果講histsize更改為2000,那麼會預設儲存2000條。1000條記錄儲存在家目錄的 bash history 中,僅當使用者正常退出當前shell時,當前shell中執行的命令才會儲存到 bash histo...

Shell程式設計 Shell函式

shell函式 1.將命令序列按格寫在一起 2.可方便重複使用命令序列 3.shell函式定義 function 函式名 4.呼叫函式的方法 函式名 引數1 引數2 5.shell函式應用示例 1 兩個數字求和 要求 通過sum 定義函式 兩個數求和 方法一 root localhost vim d...

Shell程式設計

1 建立指令碼 vi emacs等即可 bin sh 2 shell變數 對shell來講,所有的變數的取值都是乙個字串 shell是一種解釋性語言,變數無需事先定義 shell中的系統變數 程式命令列引數的數目 儲存前乙個命令的返回值 0 當前程式名 以 1 2 形式儲存所有輸入的命令列引數 以 ...