Shell程式設計基礎學習之三:變數和test

趙明威發表於2014-09-16

心得技巧:

編寫shell指令碼的時候.每次都要寫PATH 所以把PATH的值交給一個環境變數可以減少輸入: 但是隻能在本機執行;若要其他機器執行,則要設定環境變數.

declare命令參看Linux基本命令學習之五

[hadoop@hadoop scripts]$ declare -x path
[hadoop@hadoop scripts]$ echo $path
/bin:/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin:~/bin
[hadoop@hadoop scripts]$ declare -p path
declare -x path="/bin:/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin:~/bin"

利用path環境變數編寫指令碼

#!/bin/bash
PATH=$path
export PATH
echo $path
echo -e "I will use 'touch' command to create 3 files."
read -p "Please iput your filename:" flieuser
filename=${fileuser:-"filename"}
            #時間作為檔名字尾,防止重複
date1=$(date --date='2 days ago' +%Y%m%d)
date2=$(date --date='1 days ago' +%Y%m%d)
date3=$(date +%Y%m%d)
file1=${filename}${date1}
file2=${filename}${date2}
file3=${filename}${date3}
touch "$file1"
touch "$file2"
touch "$file3"

執行結果:

[hadoop@hadoop scripts]$ sh sh03.sh 
/bin:/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin:~/bin
I will use 'touch' command to create 3 files.
Please iput your filename:zhaomingwei
[hadoop@hadoop scripts]$ ll
total 12
-rw-rw-r-- 1 hadoop hadoop   0 Aug 23 19:01 filename20140821
-rw-rw-r-- 1 hadoop hadoop   0 Aug 23 19:01 filename20140822
-rw-rw-r-- 1 hadoop hadoop   0 Aug 23 19:01 filename20140823
-rw-rw-r-- 1 hadoop hadoop 122 Aug 23 16:29 sh01.sh
-rw-rw-r-- 1 hadoop hadoop 234 Aug 23 16:37 sh02.sh
-rw-rw-r-- 1 hadoop hadoop 410 Aug 23 18:59 sh03.sh
=================

由於在Linux中配置檔案的配置工作是 比較多,而且要求的許可權也各不相同,所以有時候不得不使用一些特殊方法,比如,新增使用者到"超戶"

修改配置檔案並生效:

[hadoop@hadoop scripts]$ more sh05.sh 
#!/bin/bash
PATH=$path
export PATH
if [ $UID -ne 0 ];then 
 sudo  /etc/profile;exit
 source /etc/profile
else 
 source /etc/profile
fi

新增sudo (超戶)使用者root 下面

# vi /etc/sudoers
找到:root    ALL=(ALL)     ALL
新增:(使用者名稱)hadoop ALL=(ALL)   ALL

==================

test命令檢查某個檔案的相關屬性:(重要)

--------------------------------
test -e 檔名 檢查該檔案是否存在
test -f 檔名 該檔名是否存在且為檔案file
test -d 檔名 該檔名是否存在且為目錄 常用
-r 檢測是否具有可讀的許可權:
-w  檢測是否具有可寫許可權
-x  檢測是否具有可執行許可權
-s 檢測是否存在且為非空
---------------------------
-a 兩個條件同時成立
-o 任何一個條件成立
! 反向狀態
--------------------------------

判定字串的資料:

test -z string  判斷字串是否為0 ,若為空字串則為true
test -n string 判斷string是否為0, 若為0 則為false 
test str1 = str2 若相等,返回true
============================================
判斷兩個數大小
-ne 不相等
-eq 相等
-gt 大於
-lt 小於
============================================
如果為 true 則返回第一個值,否則返回第二個值
[hadoop@hadoop scripts]$ test -e /dmtsai && echo "exist" || echo "Not exist"

結果

Not exist

相關文章