第一章:shell基礎
●umask --查看當前用戶建立文件或文件夾時的默認權限
eg:
[test@szbirdora 1]$umask
0002
[test@szbirdora 1]$ls -lh
-rw-rw-r-- test test myfile
drwxrwxr-x test test 1
上面的例子中咱們看到由test默認建立的文件myfile和文件夾1的權限分別爲664,775.而經過umask查到的默認權限爲002.因此能夠推斷出umask的計算算法爲:
umask file directory
0 6 7
1 5 6
2 4 5
3 3 4
4 2 3
5 1 2
6 0 1
7 0 0
●鏈接ln
硬鏈接 ln sourcefile targetfile 鏈接後的target文件大小和source文件同樣
軟鏈接 ln -s sourcefile targetfile 相似於windows的快捷方式
●shell script 基本結構
#!/bin/bash --------bash shell開頭必須部分
# description --------註釋部分(無關緊要,爲了閱讀方便最好加以說明)
variable name=value ---------變量部分,聲明變量,賦值
control segment ---------流程控制結構,如判斷、循環、順序
eg.
helloworld.sh
#! /bin/bash
# This is a helloworld shell script
printchar = "hello world"
echo $printchar
[test@szbirdora 1]$sh helloworld.sh
hello world
●shell 特性
①別名 alias eg. alias ll = 「ls -l」
②管道 a |b 將a命令的輸出做爲b命令的輸入 eg. ls |sort 將ls列舉的項排序
③命令替換 a `b` 將b命令的輸出做爲a命令的輸入 eg. ls `cat myfile` 列舉出cat myfile的輸出項
④後臺運行 nohup command& 可經過jobs -l查看後臺運行的腳本
⑤重定向 >,< 能夠改變程序運行的輸出來源和輸入來源
⑥變量 能夠用$varname 來調用變量
⑦特殊字符
`用來替換命令
\用來使shell沒法認出其後的特殊字符,使其失去特殊含義
;容許一行放多個命令
() 建立成組的命令 ??
{} 建立命令塊 ??
第二章:變量和運算符
●本地變量:在用戶如今的shell生命期的腳本中使用。設置變量:various_name=value.可用set 來查看。用readonly可使變量只讀。
●環境變量:用於當前用戶下全部用戶進程(不限於如今的shell)。
設置變量:export various_name=value。用env查看。
用readonly可使變量只讀。
●變量替換
echo ${variable name} 顯示實際值到variable name
echo ${variable name:+value} 若是設置了variable name,則顯示其值,不然爲空
echo ${variable name:?value} 若是未設置variable name,則顯現用戶定義錯誤信息value
echo ${variable name:-value} 若是未設置,則顯示其值
echo ${variable name:=value} 若是未設置,則設置其值,並顯示
●清除變量 unset variable name
●位置變量
位置變量表示$0,$1,$2...$9
$0 ----腳本名字
$1 ----根據參數位置表示參數1
eg.
#! /bin/bash
#parm.sh
echo "This is script name : $0"
echo "This is parameter 1: $1"
echo "This is parameter 2: $2"
[test@szbirdora 1]$sh parm.sh a b
This is script name : parm.sh
This is parameter 1: a
This is parameter 2: b
●向系統中傳遞位置變量
#!/bin/bash
#parm.sh
find /u01/test/1 -name $1 -print
[test@szbirdora 1]$ sh parm.sh myfile
/u01/test/1/myfile
●標準變量 bash默認創建了一些標準環境變量,可在/etc/profile中定義
EXINIT
HOME
IFS
LOGNAME --當前登陸用戶名
MAIL
MAILPATH
PATH
TERM --終端信息
TZ --時區
PS1 --登陸提示,如[test@szbirdora 1]$
[test@szbirdora 1]$ echo $PS1
[\u@\h \W]\$ --\u -user --\h -host --\W -document
PS2 --一命令多行,換行提示,如>
PWD --當前目錄
MAILCHECK --每隔多少秒檢查是否有新郵件
[test@szbirdora 1]$ echo $MAILCHECK
60
SHELL
MANPATH --幫助文檔位置
TERMINFO --終端信息
●特殊變量
$# 傳遞到腳本的參數個數
$* 以一個單字符串顯示全部向腳本傳遞的參數,與位置變量不一樣,參數可超過9個
$$ 腳本運行的當前進程ID號
$! 後臺運行的最後一個進程的進程ID號
$@ 傳遞到腳本的參數列表,並在引號中返回每一個參數
$- 顯示shell使用的當前選項,與set命令功能相同
$? 顯示最後命令的退出狀態,0表示沒有錯誤,其餘表示有錯誤
eg.
#!/bin/bash
#parm
echo "this is shellname: $0"
echo "this is parm1 : $1"
echo "this is parm2 : $2"
echo "show parm number : $#"
echo "show parm list : $*"
echo "show process id: $$"
echo "show precomm stat: $?"
[test@szbirdora 1]$ sh parm.sh a b
this is shellname: parm.sh
this is parm1 : a
this is parm2 : b
show parm number : 2
show parm list : a b
show process id: 24544
show precomm stat: 0
●影響變量的命令
declare 設置或顯示變量
-f 只顯示函數名
-r 建立只讀變量
-x 建立轉出變量
-i 建立整數變量
使用+替代-,能夠顛倒選項的含義
export
-p 顯示所有全局變量
shift[n] 移動位置變量,調整位置變量,使$3賦予$2,使$2賦予$1 n 前移n
typeset 和declare同義
注意:雙引號不能解析$,\,`三個字符,因此在雙引號中能夠引用變量、轉義字符、替換變量
單引號能夠解析,因此單引號中引用變量等無效
[test@szbirdora 1]$ echo "$test"
test
[test@szbirdora 1]$ echo '$test'
$test
算法
●運算符類型
⒈按位運算符
~ 取反
<< 左移運算符
>> 右移運算符
& 與
| 或
^ 異或
$[ ] 表示形式告訴shell對方括號中表達式求值 $[a+b]
2.邏輯運算符
&&
||
>,<,=,!=
3.賦值運算符
let variablename1 +=variablename1+ varablename2shell