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
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意思是
(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表示執行失敗