概述
程序:指令+數據
程序編程風格:
過程式:以指令為中心,數據服務于指令
對象式:以數據為中心,指令服務于數據
shell程序:提供了編程能力,解釋執行
計算機:運行二進制指令;
編程語言:
低級:
匯編
高級:
編譯:高級語言–>編譯器–>目標代碼 java,C#
解釋:高級語言–>解釋器–>機器代碼 shell, perl, python
編程邏輯處理方式:
順序執行
循環執行
選擇執行
shell編程:
過程式、解釋執行
編程語言的基本結構:
數據存儲:
變量、數組 表達式: a + b
語句:if
shell腳本是包含一些命令或聲明,并符合一定格式的文 本文件
格式要求:首行shebang機制
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl
shell腳本的用途有:
自動化常用命令
執行系統管理和故障排除
創建簡單的應用程序
處理文本或文件
bash -n /path/to/some_script 檢測腳本中的語法錯誤
bash -x /path/to/some_script 調試執行
變量命名法則:
1、不能使程序中的保留字:例如if, for;
2、只能使用數字、字母及下劃線,且不能以數字開頭
3、見名知義
4、統一命名規則:駝峰命名法
變量的種類;
根據變量的生效范圍等標準:
本地變量:生效范圍為當前shell進程;對當前shell之外 的其它shell進程,包括當前shell的子shell進程均無效
環境變量:生效范圍為當前shell進程及其子進程 局部變量:生效范圍為當前shell進程中某代碼片斷(通常 指函數) 位置變量:$1, $2, …來表示,用于讓腳本在腳本代碼 中調用通過命令行傳遞給它的參數 特殊變量:$?, $0, $*, $@, $#。
本地變量
變量賦值:name=‘value’,
可以使用引用value:
(1) 可以是直接字串; name=“root"
(2) 變量引用:name="$USER"
(3) 命令引用:name=`COMMAND`, name=$(COMMAND)
變量引用:${name}, $name "":
弱引用,其中的變量引用會被替換為變量值 '':
強引用,其中的變量引用不會被替換為變量值,而保 持原字符串
顯示已定義的所有變量:set
刪除變量:unset name
環境變量
變量聲明、賦值: export name=VALUE declare -x name=VALUE
變量引用:$name, ${name}
顯示所有環境變量: export env printenv
刪除:unset name
bash有許多內建的環境變量:PATH, SHELL, USRE,UID, HISTSIZE, HOME, PWD, OLDPWD, HISTFILE, PS1
位置變量
只讀變量:只能聲時,但不能修改和刪除 readonly name declare -r name
位置變量:在腳本代碼中調用通過命令行傳遞給腳本的參數
$1, $2, …:對應第1、第2等參數,shift [n]換位置
$0: 命令本身
$*: 傳遞給腳本的所有參數,全部參數合為一個字符串
$@: 傳遞給腳本的所有參數,每個參數為獨立字符串
$#: 傳遞給腳本的參數的個數
$@ $* 只在被雙引號包起來的時候才會有差異
相同點:都是引用所有參數
不同點:只有在雙引號中體現出來
假設你的腳本運行時你寫了三個參數 分別存儲在$1 $2 $3中
則"$*" 等價于 “$1 $2 $3" —》傳遞了一個參數
而“$@" 等價于 "$1" "$2" "$3" —》傳遞了三個參數
示例:判斷給出的文件的行數 linecount="$(wc -l $1| cut -d' ' -f1)" echo "$1 has $linecount lines."
bash中的算術運算:
help let +, -, *, /, %取模(取余), **(乘方) 實現算術運算:
(1) let var=算術表達式
[root@centous1 ~]# let var1=1+2 [root@centous1 ~]# echo $var1 3
(2) var=$[算術表達式]
[root@centous1 ~]# var2=$[2+3] [root@centous1 ~]# echo $var2 5
(3) var=$((算術表達式))
[root@centous1 ~]# var3=$((3+4)) [root@centous1 ~]# echo $var3 7
(4) var=$(expr arg1 arg2 arg3 …)
[root@centous1 ~]# var4 = $(expr $var2 + $var3) -bash: var4: command not found [root@centous1 ~]# var4=$(expr $var2 + $var3) [root@centous1 ~]# echo $var4 12 這里我犯了一個錯誤,注意等號的兩邊是沒有空格的。
(5) declare –i var = 數值
(6) echo ‘算術表達式’ | bc
乘法符號有些場景中需要轉義,如*
bash有內建的隨機數生成器:$RANDOM(1-32767) echo $[$RANDOM%50] :0-49之間隨機數
自增,自減:
let var+=1
let var++
let var-=1
let var–
邏輯運算
根據退出狀態而定,命令可以有條件地運行
? && 代表條件性的AND THEN
? || 代表條件性的OR ELSE
數值測試:
-gt: 是否大于;
-ge: 是否大于等于;
-eq: 是否等于;
-ne: 是否不等于;
-lt: 是否小于;
-le: 是否小于等于;
字符串測試:
==:是否等于;
>: ascii碼是否大于ascii碼
<: 是否小于
!=: 是否不等于
=~: 左側字符串是否能夠被右側的PATTERN所匹配 注意: 此表達式一般用于[[ ]]中;
-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權限;
第一種方式:
COMMAND1 && COMMAND2 并且 COMMAND1 || COMMAND2 或者 ! COMMAND 非
如:[ -e FILE ] && [ -r FILE ]
第二種方式: EXPRESSION1 -a EXPRESSION2 并且 EXPRESSION1 -o EXPRESSION2
或者 ! EXPRESSION 必須使用測試命令進行;
# [ -z “$HOSTNAME” -o $HOSTNAME "==\ "localhost.localdomain" ] && hostname www.magedu.com # [ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab
原創文章,作者:forest,如若轉載,請注明出處:http://www.www58058.com/35337
寫的很詳細,總結的·很棒哦,作業需要好好完成哦