shell編程基礎一

變量 算術|字符|條件測試

1、shell編程:過程式、解釋執行 
2、shell腳本基礎 
  2.1shell腳本: 包含一些命令或聲明,并符合一定格式的文本文件 
  2.2格式要求:首行shebang機制 
     #!/bin/bash 
     #!/usr/bin/python 
     #!/usr/bin/perl 
  2.3shell腳本的用途有: 
     自動化常用命令 
     執行系統管理和故障排除 
     創建簡單的應用程序 
     處理文本或文件  ?
3、創建shell腳本 
  3.1第一步:使用文本編輯器來創建文本文件 
     第一行必須包括shell聲明序列:#! 
     #!/bin/bash 
     添加注釋,注釋以#開頭 
  3.2第二步:運行腳本 
     給予執行權限,在命令行上指定腳本的絕對或相對路徑 
     直接運行解釋器,將腳本作為解釋器程序的參數運行 
4、腳本代碼開頭約定 
  4.1第一行一般為調用使用的語言 
  4.2程序名,避免更改文件名為無法找到正確的文件 
  4.3版本號 
  4.4更改后的時間 
  4.5作者相關信息 
  4.6該程序的作用,及注意事項 
  4.7最后是各版本的更新簡要說明
5、腳本測試
  5.1檢測腳本中的語法錯誤 
     bash -n /path/to/some_script
  5.2調試執行
     bash -x /path/to/some_script 
3A3_)7H{]W(MOWJAUXY1(VV
6、變量 
  6.1強類型:變量不經過強制轉換,它永遠是這個數據類型,不允許隱式的類型轉換。一般定義變量時必
  須指定類型、參與運算必須符合類型要求;調用未聲明變量會產生錯誤 
  如 java,c# 
  6.2弱類型:語言的運行時會隱式做數據類型轉換。無須指定類型,默認均為字符型;參與運算會自動進
  行隱式類型轉換;變量無須事先定義可直接調用 
   如:bash不支持浮點數,php 
  6.3變量命名法則: 
    6.3.1不能使程序中的保留字:例如if, for 
    6.3.2只能使用數字、字母及下劃線,且不能以數字開頭 
    6.3.3見名知義 
  6.4統一命名規則:駝峰命名法 
7、bash中變量的種類 
  根據變量的生效范圍等標準劃分下面變量類型: 
  7.1局部變量:生效范圍為當前shell進程;對當前shell之外的其它shell進程,包括當前shell的
  shell進程均無效 
`3W5F[74$TNZ20J2$)SUL%9
>>------------------------------------------------------------------------------------
  變量賦值:name=‘value’ 
  可以使用引用value: 
   (1) 可以是直接字串; name=“root" 
   (2) 變量引用:name="$USER" 
   (3) 命令引用:name=`COMMAND` name=$(COMMAND) 
 變量引用:${name} $name 
    "":弱引用,其中的變量引用會被替換為變量值 
    '':強引用,其中的變量引用不會被替換為變量值,而保持原字符串 
AQGYGTD659])IA1B~O$3C`9
 顯示已定義的所有變量:set 
(`J%`C@GXN3G{XAAG0M%IHA
 刪除變量:unset name 
注:name=$name和name="$name"有區別,如果name值為多行字符,后者可保持原字符格式,不自動合并
@5N{%0[31YOCT%3@$5FDQ)F
<<------------------------------------------------------------------------------------
  7.2環境(全局)變量:生效范圍為當前shell進程及其子進程 
>>------------------------------------------------------------------------------------
 變量聲明、賦值: 
   export name=VALUE 
   declare -x name=VALUE 
Y)I693QX%ZF9Y898FS$K~M0
---->pstree命令可查看當前進程位置
2}7R~@L}5[]R0VI7SHZ0~6A
6D9B@}E{OVURF3{Y[K0F~S9
 變量引用:$name, ${name} 
 顯示所有環境變量: 
  env 
  printenv 
  export 
  declare -x 
MAK4~6`5}S6YK$T{`YFA
 刪除變量: 
  unset name
<<----------------------------------------------------------------------------------- 
  7.3本地變量:生效范圍為當前shell進程中某代碼片斷,通常指函數 
  7.4位置變量:$1, $2, ...來表示,用于讓腳本在腳本代碼中調用通過命令行傳遞給它的參數 
>>------------------------------------------------------------------------------------
 只讀變量:只能聲明,但不能修改和刪除 
 聲明只讀變量: 
   readonly name 
   declare -r name 
U8@Y_~[9F)4%K~5AUJN0T]X
 查看只讀變量: 
   readonly –p 
1Z2NRHAL0I1E_A7}(KK$X%N
位置變量:在腳本代碼中調用通過命令行傳遞給腳本的參數 
   $1, $2, ...:對應第1、第2等參數,shift [n]換位置 
   $0: 命令本身 
   $*: 傳遞給腳本的所有參數,全部參數合為一個字符串 
   $@: 傳遞給腳本的所有參數,每個參數為獨立字符串 
   $#: 傳遞給腳本的參數的個數 
   $@ $* 只在被雙引號包起來的時候才會有差異 
 set -- 清空所有位置變量 
<<------------------------------------------------------------------------------------
  7.5特殊變量:$?, $0, $*, $@, $#,$$ $_
    $$:當前進程PID
    $_:上一條命令最有一個參數
注:(list)表示在小括號里創建當前進程子進程,運行結束退出,無顯示信息
    { list; }只影響當前進程
L@K21$}SE(IJG~P73UW@M3D
---->x=1;echo $$;(echo $$;echo "subx=$x";x=2;echo "subx2=$x");echo "x=$x"
(}PWWE%(Z7%[TAYCH0~FV29
注:subshell中的$$取到的仍然是父進程bash的pid,如果想要取到subshell的pid,可以使用BASHPID變

8、退出狀態 
 進程使用退出狀態來報告成功或失敗 
   0 代表成功,1-255代表失敗 
   $? 變量保存最近的命令退出狀態 
 例如: 
   ping -c1 -W1 hostdown &> /dev/null 
   echo $??
---->ping命令,通過icmp包協議探測對方主機是否在線,一般局域網使用
   -c :表示ping次數,也就是icmp包個數
   -W:timeout,
9、退出狀態碼 
  bash自定義退出狀態碼 
    exit [n]:自定義退出狀態碼 
  注意:腳本中一旦遇到exit命令,腳本會立即終止;終止退出狀態取決于exit命令后面的數字 
  注意:如果未給腳本指定退出狀態碼,整個腳本的退出狀態碼取決于腳本中執行最后一條命令的狀態碼 
10、算術運算 
  bash中的算術運算:help let 
    +, -, *, /, %取模(取余), **(乘方) 
  實現算術運算: 
   (1) let var=算術表達式 
   (2) var=$[算術表達式] 
   (3) var=$((算術表達式)) 
   (4) var=$(expr arg1 arg2 arg3 ...) 
   (5) declare –i var = 數值 
   (6) echo ‘算術表達式’ | bc 
  乘法符號有些場景中需要轉義,如* 
  bash有內建的隨機數生成器:$RANDOM(0-32767) 
    echo $[$RANDOM%50] :0-49之間隨機數?
賦值 
  增強型賦值: 
    +=, -=, *=, /=, %= 
  let varOPERvalue 
    例如:let count+=3 
    自加3后自賦值 
  自增,自減: 
    let var+=1 
    let var++ 
    let var-=1 
    let var-- 
11、bash的數值測試 
     -v VAR :變量VAR是否設置 
   數值測試: 
    -gt 是否大于 
    -ge 是否大于等于 
    -eq 是否等于 
    -ne 是否不等于 
    -lt 是否小于 
    -le 是否小于等于?
12、字符串測試: 
     == 是否等于 
     > ascii碼是否大于ascii碼 
     < 是否小于 
     != 是否不等于 
     =~ 左側字符串是否能夠被右側的PATTERN所匹配 
 注意: 此表達式一般用于[[ ]]中;擴展的正則表達式 
     -z "STRING“ 字符串是否為空,空為真,不空為假 
     -n "STRING“ 字符串是否不空,不空為真,空為假 
注意:用于字符串比較時的用到的操作數都應該使用引號?
13、Bash的文件測試 
  存在性測試 
   -a FILE:同-e 
   -e FILE: 文件存在性測試,存在為真,否則為假 
  存在性及類別測試 
   -b FILE:是否存在且為塊設備文件 
   -c FILE:是否存在且為字符設備文件 
   -d FILE:是否存在且為目錄文件 
   -f FILE:是否存在且為普通文件 
   -h FILE 或 -L FILE:存在且為符號鏈接文件 
   -p FILE:是否存在且為命名管道文件 
   -S FILE:是否存在且為套接字文件
   -s FILE:是否存在且不是空文件
14、文件權限測試: 
     -r FILE:是否存在且可讀 
     -w FILE: 是否存在且可寫 
     -x FILE: 是否存在且可執行 
   文件特殊權限測試: 
     -u FILE:是否存在且擁有suid權限 
     -g FILE:是否存在且擁有sgid權限 
     -k FILE:是否存在且擁有sticky權限 ?
?15、文件大小測試: 
    -s FILE: 是否存在且非空 
  文件是否打開: 
   -t fd: fd 文件描述符是否在某終端已經打開 
   -N FILE:文件自從上一次被讀取之后是否被修改過 
   -O FILE:當前有效用戶是否為文件屬主 
   -G FILE:當前有效用戶是否為文件屬組?
16、雙目測試: 
   FILE1 -ef FILE2: FILE1是否是FILE2的硬鏈接 
   FILE1 -nt FILE2: FILE1是否新于FILE2(mtime) 
   FILE1 -ot FILE2: FILE1是否舊于FILE2
17、bash的組合測試條件 
  第一種方式: 
   COMMAND1 && COMMAND2 并且 
   COMMAND1 || COMMAND2 或者 
   ! COMMAND 非 
     如:[[ -r FILE ]] && [[ -w FILE ]] 
  第二種方式: 
   EXPRESSION1 -a EXPRESSION2 并且 
   EXPRESSION1 -o EXPRESSION2 或者 
   ! EXPRESSION 
注:必須使用測試命令進行 ?
18、使用read命令來接受輸入 
  使用read來把輸入值分配給一個或多個shell變量 
   -p 指定要顯示的提示 
   -s 靜默輸入,一般用于密碼 
   -n N 指定輸入的字符長度N 
   -d ‘字符’ 輸入結束符 
   -t N TIMEOUT為N秒 
read 從標準輸入中讀取值,給每個單詞分配一個變量 所有剩余單詞都被分配給最后一個變量 
  read -p “Enter a filename: “ FILE?






 

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/95621

(0)
parrotparrot
上一篇 2018-04-10
下一篇 2018-04-10

相關推薦

  • 網絡協議詳解

    TCP協議、IP協議

    2018-04-30
  • 第五天作業

    shell 腳本編寫[xhm@localhost ~]$ cat test.sh#!/bin/bash XXXXecho “welcome to beijing”ls -d /etc/[pP]*echo “hell -etss”ls -d /var/* | tr ‘a-z’ &#8216…

    Linux筆記 2018-05-27
  • 馬哥教育– 第一周作業

    一、描述計算機的組成及其功能。 計算機由運算器,控制器,存儲器,輸入設備和輸出設備五大部分組成。 運算器的功能是用于完成算術運算、邏輯運算。負責計算機執行的所有數學與邏輯功能。 控制器的功能是主要負責對程序所執行的指令進行分析,并協調計算機各部件進行工作計算機的所有其他部件。 存儲器的功能是用于儲存信息的設備,通常是將信息數字化后再利用電、磁、光學等方式的媒…

    2018-05-12
  • 詳細說明進行管理工具htop、vmstat等相關命令,并舉例

    htop命令: 選項: -d #:指定延遲時間間隔 -u UserName:僅顯示指定用戶的進程 -s COLUME:以指定字段進行排序 htop -u root -d 10 PID:進程ID USER:用戶名 PRI:優先級 NI:nice值 VIRT:Size in memory of the total program size RES:所使用的物理內…

    2018-06-15
  • linux與xshell入門

    難的不行,做標記

    2018-07-29
欧美性久久久久