1. 程式人生 > >shell執行指令碼以及定義變數

shell執行指令碼以及定義變數

##############################
1.如何檢視當前使用者預設shell
##############################
echo $SHELL

cat /etc/passwd | head -1

grep root /etc/passwd
在這裡插入圖片描述
可知在當前使用者下指令碼開頭應為
#!/bin/bash

###############################
2.怎麼寫指令碼
###############################
#!/bin/bash
echo “hello”
echo後接的是輸出內容
在這裡插入圖片描述
有許可權時
給許可權後輸入路徑執行
此過程是開啟一個新shell執行,不會把值傳回


/mnt/1.sh
./1.sh
在這裡插入圖片描述
這種方式會使用source或.號來讀如指定shell檔案,並會把其他shell中的變數值或函式返回給父shell繼續使用
source 1.sh
. 1.sh
在這裡插入圖片描述
沒有執行許可權時
此過程是開啟一個新shell執行,不會把值傳回
sh 1.sh
bash 1.sh

例如
在這裡插入圖片描述
直接執行檢視username時為空格
在這裡插入圖片描述
source執行後檢視username就有結果
在這裡插入圖片描述

寫一個指令碼自動安裝httpd並且設定開啟服務和開機啟動
在這裡插入圖片描述

###################
3.環境變數和普通變數
#####################
環境變數是系統定義的變數

普通變數需要自己定義

(1)不加引號,單引號和雙引號的區別

不加引號時
a=ab
echo $a輸出為ab

單引號

b=‘b-$a’
echo b b b輸出為 b-

a

雙引號

c=“c-$a”
echo $c輸出為
c-ab
區別在於雙引號內會解析
在這裡插入圖片描述

(2)$0

#!/bin/bash
echo $0

sh 1.sh輸出結果
1.sh
在這裡插入圖片描述

/mnt/1.sh輸出結果為
/mnt/1.sh

在這裡插入圖片描述
(3)$n

#!/bin/bash
echo $1 $2

sh後接兩輸入
執行輸出為兩輸入
在這裡插入圖片描述
編寫檔案內容為$1到$10
在這裡插入圖片描述

sh 1.sh {a…z}就是顯示後接1到10個輸出
但是輸出為a到a0
在這裡插入圖片描述
此時$10意思是 1 0 1和0 需要改為 (10)

(4)$#
意思是後面輸入的總數

(5)read str
意思是定義一個輸入
echo $str檢視
在這裡插入圖片描述
我們可以增加一個提示
read -p “請輸入一個數:” i
echo $str檢視
在這裡插入圖片描述
(6)把結果賦值給變數

CMD=$(ls -l)
echo $CMD檢視變數

在這裡插入圖片描述
練習打包所有日誌並且名字為當前日期
命令
tar zcf log_$(date +%F).tar.gz /var/log
指令碼

#!/bin/bash
tarname="log_$(date +%F).tar.gz"
tar zcf $tarname /var/log/

在這裡插入圖片描述
(7)$?
檢測上條命令執行結果的返回值
echo $?
0表示執行成功
非0表示執行失敗
在這裡插入圖片描述