Shell學習筆記
來源:程序員人生 發布時間:2015-05-21 08:08:15 閱讀次數:3153次
#!/bin/bash
# Author:undoner
# Copyright (c) undoner
# Test Code
# -----------------------------------------------------------------
#標準輸入輸出
echo "What is your name?"
read PERSON
echo "Hello,${PERSON}"
printf "%d %s
" 1 "abc"
# -----------------------------------------------------------------
#聲明變量:readonly(只讀),unset(刪除)
var="undoner"
echo "${var}" #輸出 undoner
echo ${#var} #統計字符數量,輸出 7
echo ${var:1:4} #字符串截取,輸出ndon
echo `expr index "$var" d` #查找字符,輸出索引 3
# -----------------------------------------------------------------
#聲明函數:
Hello () {
echo "聲明函數"
}
Hello
#輸出:聲明函數
# -----------------------------------------------------------------
#條件控制:
echo 'if else語句'
if_a=10
if_b=20
if [ $if_a == $if_b ]
then
echo "if_a is equal to if_b"
else
echo "if_a is not equal to if_b"
fi
# -----------------------------------------------------------------
#循環控制:
#break命令允許跳出所有循環(終止履行后面的所有循環)。
#continue命令與break命令類似,但只跳出當前循環。
echo 'for循環'
for for_str in 'This is a string'
do
echo $for_str
done
#輸出:This is a string
for FILE in $HOME/.bash*
do
echo $FILE
done
#輸出:顯示主目錄下以 .bash 開頭的文件
echo 'while循環'
while_sum=0
while [ $while_sum -lt 5 ]
do
while_sum=`expr $while_sum+1`
echo $while_sum
done
#實現計數(有換行),0 1 2 3 4 5
echo 'until循環'
until_sum=0
until [ ! $until_sum -lt 5 ]
do
echo $until_sum
until_sum=`expr $until_sum + 1`
done
#實現計數(有換行),0 1 2 3 4 5
# -----------------------------------------------------------------
echo 'case esac語句'
echo 'Input a number between 1 to 2'
echo 'Your number is:c'
read aNum
case $aNum in
1) echo 'You select 1'
;;
2) echo 'You select 2'
;;
*) echo 'You do not select a number between 1 to 4'
;;
esac
# -----------------------------------------------------------------
#聲明數組
array_name=(value0 value1 value2 value3)
echo ${array_name[@]} # 獲得數組所有的元素
echo ${array_name[*]} # 獲得數組所有的元素
echo ${array_name[2]} # 獲得數組單個元素
echo ${#array_name[@]} # 獲得數組元素的個數
echo ${#array_name[*]} # 獲得數組元素的個數
echo ${#array_name[2]} # 獲得數組單個元素的長度
# -----------------------------------------------------------------
#變量替換:變量替換可以根據變量的狀態(是不是為空、是不是定義等)來改變它的值
# 情勢
說明
# ${var}
變量本來的值
# ${var:-word}
如果變量 var 為空或已被刪除(unset),那末返回 word,但不改變 var 的值。
# ${var:=word}
如果變量 var 為空或已被刪除(unset),那末返回 word,并將 var 的值設置為 word。
# ${var:?message} 如果變量 var 為空或已被刪除(unset),那末將消息 message 送到標準毛病輸出,可以用來檢測變量 var 是不是可以被正常賦值。若此替換出現在Shell腳本中,那末腳本將停止運行。
# ${var:+word}
如果變量 var 被定義,那末返回 word,但不改變 var 的值。
# -----------------------------------------------------------------
#算術運算符列表
#運算符
說明
舉例
# +
加法
`expr $a + $b` 結果為 30。
# -
減法
`expr $a - $b` 結果為 10。
# *
乘法
`expr $a * $b` 結果為 200。
# /
除法
`expr $b / $a` 結果為 2。
# %
取余
`expr $b % $a` 結果為 0。
# =
賦值
a=$b 將把變量 b 的值賦給 a。
# ==
相等 用于比較兩個數字,相同則返回 true。
[ $a == $b ] 返回 false。
# !=
不相等 用于比較兩個數字,不相同則返回 true。
[ $a != $b ] 返回 true。
# -----------------------------------------------------------------
#關系運算符列表
# 運算符
說明
舉例
# -eq
檢測兩個數是不是相等,相等返回 true。
[ $a -eq $b ] 返回 true。
# -ne
檢測兩個數是不是相等,不相等返回 true。
[ $a -ne $b ] 返回 true。
# -gt
檢測左側的數是不是大于右側的,如果是,則返回 true。
[ $a -gt $b ] 返回 false。
# -lt
檢測左側的數是不是小于右側的,如果是,則返回 true。
[ $a -lt $b ] 返回 true。
# -ge
檢測左側的數是不是大等于右側的,如果是,則返回 true。
[ $a -ge $b ] 返回 false。
# -le
檢測左側的數是不是小于等于右側的,如果是,則返回 true。
[ $a -le $b ] 返回 true。
# -----------------------------------------------------------------
#布爾運算符列表
# 運算符
說明
舉例
# !
非運算,表達式為 true 則返回 false,否則返回 true。
[ ! false ] 返回 true。
# -o
或運算,有1個表達式為 true 則返回 true。
[ $a -lt 20 -o $b -gt 100 ] 返回 true。
# -a
與運算,兩個表達式都為 true 才返回 true。
[ $a -lt 20 -a $b -gt 100 ] 返回 false。
# -----------------------------------------------------------------
#字符串運算符列表
# 運算符
說明
舉例
# =
檢測兩個字符串是不是相等,相等返回 true。
[ $a = $b ] 返回 false。
# !=
檢測兩個字符串是不是相等,不相等返回 true。
[ $a != $b ] 返回 true。
# -z
檢測字符串長度是不是為0,為0返回 true。
[ -z $a ] 返回 false。
# -n
檢測字符串長度是不是為0,不為0返回 true。
[ -z $a ] 返回 true。
# str
檢測字符串是不是為空,不為空返回 true。
[ $a ] 返回 true。
# -----------------------------------------------------------------
#文件測試運算符列表
# 操作符
說明
舉例
# -b file
檢測文件是不是是塊裝備文件,如果是,則返回 true。
[ -b $file ] 返回 false。
# -c file
檢測文件是不是是字符裝備文件,如果是,則返回 true。
[ -b $file ] 返回 false。
# -d file
檢測文件是不是是目錄,如果是,則返回 true。
[ -d $file ] 返回 false。
# -f file
檢測文件是不是是普通文件(不是目錄和裝備文件),如果是,則返回 true。
[ -f $file ] 返回 true。
# -g file
檢測文件是不是設置了 SGID 位,如果是,則返回 true。
[ -g $file ] 返回 false。
# -k file
檢測文件是不是設置了粘著位(Sticky Bit),如果是,則返回 true。
[ -k $file ] 返回 false。
# -p file
檢測文件是不是是具名管道,如果是,則返回 true。
[ -p $file ] 返回 false。
# -u file
檢測文件是不是設置了 SUID 位,如果是,則返回 true。
[ -u $file ] 返回 false。
# -r file
檢測文件是不是可讀,如果是,則返回 true。
[ -r $file ] 返回 true。
# -w file
檢測文件是不是可寫,如果是,則返回 true。
[ -w $file ] 返回 true。
# -x file
檢測文件是不是可履行,如果是,則返回 true。
[ -x $file ] 返回 true。
# -s file
檢測文件是不是為空(文件大小是不是大于0),不為空返回 true。
[ -s $file ] 返回 true。
# -e file
檢測文件(包括目錄)是不是存在,如果是,則返回 true。
[ -e $file ] 返回 true。
# -----------------------------------------------------------------
#輸入輸出重定向,全部可用的重定向命令列表
# 命令
說明
# command > file
將輸出重定向到 file。
# command < file
將輸入重定向到 file。
# command >> file
將輸出以追加的方式重定向到 file。
# n > file
將文件描寫符為 n 的文件重定向到 file。
# n >> file
將文件描寫符為 n 的文件以追加的方式重定向到 file。
# n >& m
將輸出文件 m 和 n 合并。
# n <& m
將輸入文件 m 和 n 合并。
# << tag
將開始標記 tag 和結束標記 tag 之間的內容作為輸入。
# 其他:
# /dev/null
不顯示輸出結果
# /dev/null 2>&1
屏蔽 stdout 和 stderr的輸出
# -----------------------------------------------------------------
# wc命令
# 命令 說明
# wc -c file
統計字節數。
# wc -l file
統計行數。
# wc -m file
統計字符數。這個標志不能與 -c 標志1起使用。
# wc -w file
統計字數。1個字被定義為由空白、跳格或換行字符分隔的字符串。
# wc -L file
打印最長行的長度。
# wc -help file
顯示幫助信息
# wc --version file
顯示版本信息
# -----------------------------------------------------------------
#特殊變量列表
#變量
含義
# $0
當前腳本的文件名
# $n
傳遞給腳本或函數的參數。n 是1個數字,表示第幾個參數。例如,第1個參數是$1,第2個參數是$2。
# $#
傳遞給腳本或函數的參數個數。
# $*
傳遞給腳本或函數的所有參數。
# $@
傳遞給腳本或函數的所有參數。被雙引號(" ")包括時,與 $* 稍有不同,下面將會講到。
# $?
上個命令的退出狀態,或函數的返回值。
# $$
當前Shell進程ID。對 Shell 腳本,就是這些腳本所在的進程ID。
#轉義字符 含義
#
反斜杠
# a
警報,響鈴
#
退格(刪除鍵)
# f
換頁(FF),將當前位置移到下頁開頭
#
換行
#
回車
#
水平制表符(tab鍵)
# v
垂直制表符
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈