1. 程式人生 > >快速入門shell指令碼編寫(二)

快速入門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指令碼編第二篇什麼時候寫,我告訴他都沒什麼東西了。要學習一門語言,基本的語法和思想很重要。現在每個人都識字,那是不是每個識字的人都可以當作家。不可能,因為大多數人沒有作家的思想。程式設計是一門藝術,我們可以把程式碼寫得很優美,而中