Linux shell編程學習實例與參數分析(一)

第一章: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=valueenv查看
                      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

相關文章
相關標籤/搜索