快速入門shell指令碼編寫(二)
上次在寫shell的時候發現vi和vim不一樣:vim是vi的升級版本,它不僅相容vi的所有指令,而且還有一些新的特性在裡面。vim要比vi好用許多。
這次接著上次的內容,基礎知識,繼續學習,本文作者也在自學中,紕漏錯誤在所難免,若有人發現問題請指出謝謝!
布林運算子
先大致熟悉一下布林相關的三個運算子
! 非運算
-o 或運算(or)
-a 與運算(and)
接著寫程式熟悉一下:
執行結果:1 #!/bin/sh 2 3 a=4 4 b=6 5 6 if [ $a != $b ] 7 then 8 echo "$a != $b a is not equal to b" 9 else 10 echo "a = b" 11 fi 12 13 if [ $a -gt 3 -a $b -lt 10 ] 14 then 15 echo "and && true" 16 else 17 echo "a < 3 or b > 10" 18 fi
[email protected] /Desktop
$ sh test.sh
4 != 6 a is not equal to b
and && true
布林運算子比較簡單,和我們平時自己使用的程式語言區別不大,只需注意他的或運算和與運算子號即可。
shell指令碼有倆類較為特殊的運算子:1,字串相關運算子 2檔案測試運算子
字串 和 字串運算子
提到了字串,先講講shell中的字串,他大概是shell中最常用的資料型別了(貌似除了他也沒有其他型別了),先來看看字串的表示方式
字串可以用單引號,也可以用雙引號,也可以不用引號
單引號
倆點需要注意:
單引號裡的任何字元都會原樣輸出,單引號字串中的變數是無效的;
單引號字串中不能出現單引號(對單引號使用轉義符後也不行)
雙引號
雙引號基本沒有什麼限制,一般常用雙引號,雙引號裡面可以使用轉義字元,可以帶入變數
例:
1 animal="dog"
2 say="Hi, \"$animal\""
3
4 echo $say
執行結果:
$ sh teststr.sh
Hi, "dog"
可以看出倆個冒號被轉義了,animal代表的字串被代入新的句子中。
這裡再說有關於字串的幾個方法
1,獲取字串長度的方法
1 animal="dog"
2
3 echo ${#animal}
輸出結果:3 (這裡不能用echo $#animal ,你可以測試一下,輸出結果就不對喔,這樣$#會代表 傳遞給指令碼或函式的引數個數,所以會輸出:0animal)
2,查詢字串
1 animal="dog, pig, cat, lion and so on"
2
3 echo `expr index "$animal" cat`
輸出結果:11(注意這裡第三行,expr 和 cat之後有特殊符號,該符號不是單引號,是Esc鍵下面那個)
好了,接著我們來看看字串運算子有哪些
= 和 != 判斷倆個字串是否相等(還記得判斷數字是否相等的運算子麼(-eq和-ne))
-z 、 -n 或者直接將字串代入 判斷字串長度是否為零(-z當字串長度為0返回 true,)
下面看測試程式:
1 #! /bin/sh
2
3 a="abasdf"
4 b="sdfa"
5
6 if [ $a = $b ]
7 then
8 echo "1"
9 else
10 echo "2"
11 fi
12
13 if [ -z $a ]
14 then
15 echo "3"
16 else
17 echo "4"
18 fi
19
20 if [ $a ]
21 then
22 echo "5"
23 else
24 echo "6"
25 fi
看看執行結果:
$ sh test.sh
2
4
5
檔案測試運算子
首先我們在桌面上建立一個檔案,執行命令touch file.test
這時候我們已經建立了檔案,但是我們並不知道他的許可權是什麼,執行命令:ls -l | grep file.test檢視許可權,執行結果如下圖所示:
這裡我們對Linux許可權做簡單的介紹:
上圖中許可權最開始是-(常規檔案),而還有可能的開頭還有,
“d”目錄(非常常見,你隨便找一個目錄,在這個目錄的上一層目錄ls -l一下就可以看到)
“l”符號連結(通過ln 建立的一些連結)
“c”字元專門裝置檔案
“b”塊專門裝置檔案
“p”先進先出
“s”套接字
然後我們開始看第一個-後面的欄位,三個為一組看,第一個三元字元組(rw-)代表檔案所有者的許可權,第二個(r--)代表檔案的組的許可權,第三個(r--)代表所有其他使用者的許可權
r 和 w分別代表什麼意思呢?分別代表 可讀read 和 可寫write。還有一個目前檔案沒有該許可權,即x 可執行(execute),那我們現在到底有什麼許可權呢,一般我們擁有 第一個三元字元組 代表的許可權,即:可讀可寫
好了,那我麼賦於他可執行許可權 chmod +x file.test,這樣是賦予三個檔案所有者可執行許可權,我們也可以執行 chmod u+x file.test僅僅給我們自己加許可權。
有關於chmod指令詳細介紹,可以執行chmod --help檢視
現在許可權已經賦於檔案了。準備工作已經做好,接下來我們準備對我們新增的這個檔案做個測試。
寫如下shell用於熟練和測試:
1 #! /bin/sh
2
3 file="/Desktop/file.test"
4
5 if [ -r $file ]
6 then
7 echo "1"
8 fi
9
10 if [ -w $file ]
11 then
12 echo "3"
13 else
14 echo "4"
15 fi
16
17 if [ -f $file ]
18 then
19 echo "file is an ordinary file"
20 else
21 echo "special file"
22 fi
23
24 if [ -d $file ]
25 then
26 echo "directory"
27 else
28 echo "not direcotry"
29 fi
執行結果:
$ sh test.sh
1
3
file is an ordinary file
not direcotry
可能還對上面的某些操作符不熟悉,下面附詳細的操作符表。
操作符 | 說明 |
-b file | 檢測檔案是否是塊裝置檔案,如果是,則返回 true。 |
-c file | 檢測檔案是否是字元裝置檔案,如果是,則返回 true |
-d file | 檢測檔案是否是目錄,如果是,則返回 true。 |
-f file | 檢測檔案是否是普通檔案(既不是目錄,也不是裝置檔案),如果是,則返回 true。 |
-g file | 檢測檔案是否設定了 SGID 位,如果是,則返回 true。 |
-k file | 檢測檔案是否設定了粘著位(Sticky Bit),如果是,則返回 true。 |
-p file | 檢測檔案是否是具名管道,如果是,則返回 true。 |
-u file | 檢測檔案是否設定了 SUID 位,如果是,則返回 true。 |
-r file | 檢測檔案是否可讀,如果是,則返回 true。 |
-w file | 檢測檔案是否可寫,如果是,則返回 true。 |
-x file | 檢測檔案是否可執行,如果是,則返回 true。 |
-s file | 檢測檔案是否為空(檔案大小是否大於0),不為空返回 true。 |
-e file | 檢測檔案(包括目錄)是否存在,如果是,則返回 true。 |
相關推薦
快速入門shell指令碼編寫(二)
上次在寫shell的時候發現vi和vim不一樣:vim是vi的升級版本,它不僅相容vi的所有指令,而且還有一些新的特性在裡面。vim要比vi好用許多。 這次接著上次的內容,基礎知識,繼續學習,本文作者也在自學中,紕漏錯誤在所難免,若有人發現問題請指出謝謝! 布林運算子 先
Linux入門學習筆記(五)--Shell指令碼編寫
Shell指令碼的HelloWorld: cd /自己的路徑下 vi helloworld.sh 進入之後,預設是命令狀態,按i進入編輯模式 內容: #! /bin/bash echo "Hello World!"
如何編寫一個優雅的Shell指令碼(二)
簡介 繼上一篇,本文主要描述一個shell指令碼的基本組成 公共模組 ## 自定義寫日誌函式 function writelog() { echo "[`date -d '%Y-%m-%d %H:%M:%S'`][$$]: $1" |tess -a $tmplogf
shell指令碼編寫改密功能
#! /bin/bash read -p "請輸入修改的使用者名稱" user num=` cat /etc/passwd | cut -f1 -d':' |grep -w $user -c ` #查詢user是否在/etc/passwd ,並計算個數 #grep -q "$usern
JAVA WEB快速入門之從編寫一個JSP WEB網站了解JSP WEB網站的基本結構、除錯、部署
接上篇《JAVA WEB快速入門之環境搭建》,在完成了環境搭建後(JDK、Tomcat、IDE),現在是萬事具備,就差寫程式碼了,今天就來從編寫一個JSP WEB網站了解JSP WEB網站的基本結構、除錯、部署,至於為什麼要先寫JSP WEB,而不是直接上SSM(Spring、SpringMVC、Mybati
Shell指令碼編寫可能遇到的問題
在編寫shell指令碼過程中,由於格式和語法問題,可能導致執行指令碼不成功。 梳理一些可能的原因如下: 1. No such file or directory沒有那個檔案或目錄問題分析: 1、將windows 下編寫好的SHELL檔案,傳到linu
10 個實戰及面試常用 Shell 指令碼編寫
注意事項 1)開頭加直譯器:#!/bin/bash 2)語法縮排,使用四個空格;多加註釋說明。 3)命名建議規則:變數名大寫、區域性變數小寫,函式名小寫,名字體現出實際作用。 4)預設變數是全域性的,在函式中變數local指定為區域性變數,避免汙染其他作用域。 5)有兩個命令能幫助我除錯指令碼:set -e
shell指令碼編寫流程!!!
ubuntu終端:ctrl +art + T cd /home/thomas 到thomas目錄下 一、vi bigdata.sh 開啟vim編輯器 二、i 輸入內容 #!/bin/bash echo Hadoop Hive Hbase
Shell 程式設計 shell 指令碼編寫
原創轉載自 自海牛部落-青牛,http://hainiubl.com/topics/173 1 Vim 編輯器 1.1 vim 常用命令 1.2 針對程式設計師的vim 配置 配置方式: /etc/vimrc 全域性配置 ~/.vimrc 使用者級配置 ~/.vimin
一個很牛的 linux shell指令碼編寫的俄羅斯方塊遊戲例項程式碼,非常牛逼
可以將下面程式碼直接儲存為sh檔案。 #!/bin/bash # Tetris Game # 10.21.2003 xhchen< [email][email protected][/email]> #APP declaration
8個實戰及常用Shell指令碼編寫
注意事項: 1).開頭加直譯器:#!/bin/bash 2).語法縮排,使用四個空格,多加註釋說明 3).命名建議規範:變數名大寫,區域性變數小寫,函式名小寫 4).預設變數是全域性的,函式中使用local指定區域性變數 5).除錯指令碼兩個命令:set -e遇
Linux Shell指令碼編寫規範、例子
一、規範 Linux的Shell種類眾多,常見的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、She
shell指令碼編寫注意
這八個建議,來源於鍵者幾年來編寫 shell 指令碼的一些經驗和教訓。事實上開始寫的時候還不止這幾條,後來思索再三,去掉幾條無關痛癢的,最後剩下八條。毫不誇張地說,每條都是精挑細選的,雖然有幾點算是老生常談了。 1. 指定bash shell 指令碼的第一行,#!之後應該是什麼?如果拿
30分鐘入門Shell指令碼程式設計
什麼是Shell指令碼 示例 #!/bin/sh cd ~ mkdir shell_tut cd shell_tut for ((i=0; i<10; i++)); do touch test_$i.txt done 示例解釋 第1行:指定指令碼直譯器,這裡是用
關於python指令碼完整打包釋出(包括外部傳參的批處理指令碼或shell指令碼編寫)
在python處理簡單問題的過程中常常需要對Python指令碼打包成exe的可執行程式。並且要可移植。而最常用的方法則是用pyinstaller在dos視窗下進行打包。因為常常需要對exe檔案進行傳送外部引數由此路徑會發生錯誤。此時最為簡單的方法則是用文字編輯器開啟,修改編碼方式。詳細過程如
Shell指令碼編寫常用——————持續更新
Linux指令碼 source命令與點命令 單純執行shell指令碼./a.sh, 並不能把指令碼中定義的變數匯入到父shell中, 必須用source的方式執行才可以 $0 $? $#... h
mongodb資料庫備份和利用shell指令碼編寫
1、指令備份 MongoDB提供了備份工具,mongodump.exe,在bin目錄下,其用法如下: mongodump.exe-hlocalhost-ddatabase_name -u use
IC數字前端設計開發18 (用shell指令碼編寫區別兩個資料夾內檔案的不同)
#!/bin/bash mkdir tmp basedir="./tmp" workdir="./" #這是定義兩個目錄,按照你的說法,這兩個目錄下檔名應該都是相同的 dir1="txt_test0" dir2="txt_test1" #這是用來儲存查詢di
複製命令的Shell指令碼編寫示例
編寫指令碼/root/bin/copycmd.sh: (1) 提示使用者輸入一個可執行命令名稱 (2) 獲取此命令所依賴到的所有庫檔案列表 (3) 複製命令至某目標目錄(例如/mnt/sysroo
loadrunner指令碼編寫二
今天有朋友問我,關於loadrunner指令碼編第二篇什麼時候寫,我告訴他都沒什麼東西了。要學習一門語言,基本的語法和思想很重要。現在每個人都識字,那是不是每個識字的人都可以當作家。不可能,因為大多數人沒有作家的思想。程式設計是一門藝術,我們可以把程式碼寫得很優美,而中