Linux 第九天: Linux Shell腳本編程

Linux 第九天: (08月11日) Linux Shell腳本編程

 

 

Shell腳本是包含一些命令或聲明, 并符合一定格式的文本文件
格式要求 運行shebang機制
#!/bin/bash

 

bash -n /path/to/some_script  檢測腳本中的語法錯誤
bash -x /path/to/some_script  調試執行

 
bash中變量的種類
本地變量 生效范圍 當前shell進程, 對當前外進程, 包括子shell無效
環境變量 生效范圍 當前shell進程和子進程
局部變量 生效范圍 當前shell進程中某代碼片段 通常指函數
位置變量 $1 $2 讓腳本在代碼中調用通過命令行傳遞給它的參數
特殊變量 $? $0 $* $@ $#

 

變量賦值name='value'
name="root"字符串
name="$USER"變量引用
name=`COMMAND` 命令引用
name=$(COMMAND) 命令應用

 

變量引用 ${name} $name
""弱引用 其中變量引用被替換為變量值
''強引用 其中變量引用不會被替換為變量值 保持原字符串

set顯示已定義的所有變量
unset name 刪除變量

export name=VALUE 變量聲明 賦值
declare -x name=VALUE

變量引用 $name ${name}
顯示所有環境變量
export
env
printenv

刪除 unset name

只讀變量 只能聲明 不能修改和刪除
readonly name
declare -r name

位置變量 在腳本代碼中調用通過命令行傳遞給腳本的參數
$1,$2,..對應第1第2參數shift[n]換位置
$0 命令本身
$* 傳遞給腳本所有參數 全部參數合為一個字符
$@ 傳遞給腳本所有參數 每個參數為獨立字符
$# 傳遞給腳本的參數的個數
$@ $* 只在被雙引號包起來才有差異

linecount="$(wc-l $1|cut -d' ' -f1)"
echo "$1has $linecount lines"

bash的算術運算
+ – * / % **
let var=算術表達式
var=$[算術表達式]
var=$((算術表達式))
var=$(expr arg1 arg2 arg3…)
declare -i var = 數值
echo '算術表達式'|bc
$RANDOM (1-32767) 隨機數生成器
echo $[$RANDOM%50] 0-49取隨機數
增強型賦值 += -= /= %=
let count+=3 自加3后自賦值

s? 變量保存最近命令退出狀態
0 成功 1-255失敗
exit [n] 自定義退出狀態碼

測試命令
test EXPRESSION
[EXPRESSION]
[[EXPRESSION]]

&& 代表AND THEN
|| 代表OR ELSE

數值測試
-gt 是否大于
-ge 是否大于等于
-eq 是否等于
-ne 是否不等于
-lt 是否小于
-le 是否小于等于

字符串測試
== 是否等于
> ascii 是否大于ascii碼
< ascii 是否小于ascii碼
!= 是否不等于
=~ 左側是否能被右側匹配
-z "STRING" 字符串是否為空 空為真 不空為假
-n "STRING" 字符串是否不空 不空為真 空為假

 

 

文件測試

-a FILE 同-e
-e FILE 文件存在性測試 存在為真 否則為假
-b FILE 是否存在且為塊設備文件
-c FILE 是否存在且為字符設備文件
-d FILE 是否存在且為目錄文件
-f FILE 是否存在且為普通文件
-h FILE 或 -L FILE 存在且為符號鏈接文件
-p FILE 是否存在且為命名管道文件
-S FILE 是否存在且為套接字文件

文件權限測試
-r FILE 是否存在且可讀
-w FILE 是否存在且可寫
-x FILE 是否存在且可執行

文件特殊權限測試
-g FILE 是否存在且擁有sgid權限
-u FILE 是否存在且擁有suid權限
-k FILE 是否存在且擁有sticky權限

文件大小測試
-s FILE 是否存在且非空

文件是否打開
-t fd 表示文件描述符是否已經打開且與某終端相關
-N FILE 文件自動上一次被讀取之后是否被修改過
-O FILE 當前有效用戶是否為文件屬主
-G FILE 當前有效用戶是否為文件屬組

雙目測試
FILE1 -ef FILE2 file1與file2是否指向同一個設備上相同inode
FILE1 -nt FILE2 file1是否新于file2
FILE1 -ot FILE2 file1是否舊于file2

 
組合測試
第一種
COMMAND1 && COMMAND2 并且
COMMAND1 || COMMAND2 或者
! COMMAND 非

第二種
EXPRESSION1 -a EXPRESSION2 并且
EXPRESSION1 -o EXPRESSION2 或者
! EXPRESSSION
必須使用測試命令進行

 

 

 

原創文章,作者:dengjian,如若轉載,請注明出處:http://www.www58058.com/35729

(0)
dengjiandengjian
上一篇 2016-08-15 09:22
下一篇 2016-08-15 09:22

相關推薦

  • lvs

    1、什么是LVS LVS是Linux Virtual Server的簡寫,以為Linux虛擬服務器,是一個虛擬服務器集群,其具有很好的可伸縮性、可靠性、可管理性。LVS集群采用IP負載均衡技術和基于內容請求分發技術。調度器具有很好的吞吐率,將請求均衡地轉移到不同的服務器上執行,且調度器自動屏蔽掉服務器的故障,從而將一組服務器構成一個高性能的、高可用的虛擬服務…

    Linux干貨 2016-10-29
  • linux下zip包的壓縮與解壓

    linux zip 命令詳解  功能說明:壓縮文件。  語 法:zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工作目錄>][-ll][-n <字尾字符串>][-t <日期時間>][-<壓縮效率>][壓縮文件][文件…][-i <范本樣式&gt…

    Linux干貨 2017-04-10
  • 用NFS搭建wordpress讓兩臺httpd服務同時服務

    一、博客實踐作業: (1) nfs server導出/data/application/web,在目錄中提供wordpress;  (2) nfs client掛載nfs server導出的文件系統至/var/www/html; (3) 客戶端(lamp)部署wordpress,并讓其正常訪問;要確保能正常發文章,上傳圖片; (4) 客戶端2(la…

    2017-06-07
  • 馬哥教育網絡21期+第二周練習博客

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 長用的文件管理類命令有cp(復制),mv(移動),rm(刪除)。接下來我將為大家一一講解。 復制命令:cp 在cp時要根據源和目的做出確認與調整; 命令格式:     cp [OPTION]… [-T] SO…

    Linux干貨 2016-07-22
  • Linux進程管理

    一:進程的概念     1)進程:process,運行中的程序的一個副本的某部分,之所以說是副本的一部分是因為一個程序可以多個用戶同時以不同格式運行,如兩個用戶都在運行ls,一個運行的是ls -h ,另一個運行的是ls -l,那么這兩個用戶運行的程序代碼肯定是不一樣的而且不是程序的所有代碼;進程有生命周期; &nbsp…

    2017-03-26
  • 網絡接口Bonding以及網絡組

    網絡接口Bonding就是將多塊網卡綁定同一IP地址對外提供服務,可以實現高可用或者負載均衡。當然,直接給兩塊網卡設置同一IP地址是不可能的。通過bonding,虛擬一塊網卡對外提供連接,物理網卡的被修改為相同的MAC地址。 網絡組 :網絡組:是將多個網卡聚合在一起方法,從而實現冗錯和提高吞吐量。網絡組不同于舊版中bonding技術,提供更好的性能…

    Linux干貨 2016-11-23

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-15 16:49

    總結的很好,希望能有一些腳本示例,注意了,以后作業寫在博客總結后面。

欧美性久久久久