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
下一篇 2016-08-15

相關推薦

  • Linux文本處理及用戶組管理命令練習

    一.文本處理基礎命令 (1).? 列出當前系統上所有已經登錄的用戶的用戶名。 ? ? ? ? ? 完成命令:who ?| ?cut ?-d’ ‘? -f1 ?| ?uniq ?-u 示例: (2).取出最后登錄到當前系統對的用戶的相關信息。 ? ? ? ? 完成命令:w ?|? tail -1 示例: (3).取出當前系統上被用戶當作…

    2018-03-11
  • linux歷史命令history詳解

    history命令 history命令用于顯示指定數目的指令命令,讀取歷史命令文件中的目錄到歷史命令緩沖區和將歷史命令緩沖區中的目錄寫入命令文件。 該命令單獨使用時,僅顯示歷史命令,在命令行中,可以使用符號!執行指定序號的歷史命令。例如,要執行第2個歷史命令,則輸入!2。  128  ls  129  history[…

    Linux干貨 2016-09-05
  • 邏輯卷管理器 LVM

          邏輯卷管理器 LVM lvm概述   LVM是Logical Volume Manager(邏輯卷管理器)的簡寫,又譯為邏輯卷宗管理器、邏輯扇區管理器、邏輯磁盤管理器。是Linux核心所提供的邏輯卷管理(Logical Volume Management)功能。它在硬盤的硬盤分區之上,又…

    Linux干貨 2016-09-02
  • gitlab-ce官方文檔查看備錄

    gitlab文檔 關于gitlab-ce GitLab Community Edition (CE) is available freely under the MIT Expat license. 關于unicorn的workers For&nbs…

    Linux干貨 2015-09-06
  • 20160907 centos啟動流程

    1、centos5,6啟動流程 centos系統啟動流程linux系統的組成部分:內核+根文件系統內核:進程管理,內存管理,網絡協議棧,文件系統,驅動程序,安全功能運行的系統環境可分為兩層:內核空間,用戶空間  用戶空間:應用程序(進程或線程)  內核空間:內核代碼(系統調用)    內核設計流派:   &n…

    Linux干貨 2016-09-13

評論列表(1條)

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

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

欧美性久久久久