Shell腳本應用(一)

shell腳本執行方式:
Linux中shell腳本的執行一般有4種方式,分別爲工做目錄執行,絕對路徑執行,sh執行,shell環境執行。
首先,看下咱們的腳本內容
[tan@tan scripts]$ ll
total 4
-rw-rw-r--. 1 tan tan 68 May  8 23:18 test.sh
[tan@tan scripts]$ cat test.sh
#!/usr/bin/bash

/usr/bin/python <<-EOF
print "Hello Shell"
        EOF
一、工做目錄執行
工做目錄執行,指的是執行腳本時,先進入到腳本所在的目錄(此時,稱爲工做目錄),而後使用 ./腳本方式執行
[tan@tan scripts]$ ./test.sh
-bash: ./test.sh: Permission denied
[tan@tan scripts]$ chmod 764 test.sh
[tan@tan scripts]$ ./test.sh
Hello Shell
如圖,報了權限錯誤,這裏須要賦權,使用chmod 764 test.sh 賦權後就能夠正常執行了
./的意思是說在當前的工做目錄下執行hello.sh。若是不加上./,bash可能會響應找到不到hello.sh的錯誤信息。由於目前的工做目錄 (/data/shell)可能不在執行程序默認的搜索路徑之列,也就是說,不在環境變量PASH的內容之中。查看PATH的內容可用 echo $PASH 命令。如今的/data/shell就不在環境變量PASH中的,因此必須加上./纔可執行。
二、絕對路徑執行
絕對路徑中執行,指的是直接從根目錄/到腳本目錄的絕對路徑
[tan@tan scripts]$ pwd
/home/tan/scripts
[tan@tan scripts]$ `pwd`/test.sh
Hello Shell
[tan@tan scripts]$ /home/tan/scripts/test.sh
Hello Shell
這裏 `pwd` 指的是該命令執行結果,等同於 /home/tan/scripts
三、sh執行
sh執行,指的是用腳本對應的sh或bash來接着腳本執行
[tan@tan scripts]$ sh test.sh
Hello Shell
[tan@tan scripts]$ bash test.sh
Hello Shell
注意,如果以方法三的方式來執行,那麼,能夠沒必要事先設定shell的執行權限,甚至都不用寫shell文件中的第一行(指定bash路徑)。由於方法三 是將hello.sh做爲參數傳給sh(bash)命令來執行的。這時不是hello.sh本身來執行,而是被人家調用執行,因此不要執行權限。那麼不用 指定bash路徑天然也好理解了啊,呵呵……。
四、shell環境執行
shell環境執行,指的是在當前的shell環境中執行,能夠使用 . 接腳本 或 source 接腳本
[tan@tan scripts]$ . test.sh
Hello Shell
[tan@tan scripts]$ source test.sh
Hello Shell
 
註釋:「./」、sh、bash是相同的執行方式,「.」和source是相同的
source和「.」執行腳本時,將腳本中語句在本shell中執行,
sh、bash和./是在執行腳本時先啓動一個新的shell,而後讓腳本中的語句在新的shell中執行,執行完後就退出。
 
二:重定向與管道操做
一、重定向
    程序 = 指令(命令) + 數據(變量)
    在程序中,數據如何輸入和輸出
   1) 數據輸入:鍵盤 -- 標準輸入,可是不是惟一輸入方式
        echo "123456" | passwd --stdin "username"      //輸入密碼
        ./useradd.sh< user.txt        //把user.txt中文件重定向到useradd.sh中
   2) 數據輸出:顯示器--標準輸出,可是不是唯一的輸出方式。
        ls /etc/ > a.txt
        fd文件標識符0-9:至關於給文件分類
       0:標準輸出
       1:標準輸入
       2:錯誤輸入輸出
常見重定向符號:
  1)標準輸出
    >       覆蓋重定向
    set -C  關閉覆蓋重定向的功能   set +C:恢復
    >|    強制重定向    
    >>      追加劇定向
  2)標準輸入
    <     a<b   :把b交給a執行
    << 追加輸入
  3)錯誤輸出
    2>  2>>
    擴展:不須要輸出內容,只須要輸出狀態;
    echo $?  :判斷上一條命令是否正確(0正確,1-255其餘都不正確)
二、管道符 ( | )
|  前一個命令的執行結果交給後一個命令來執行
2、Shell變量
使用shell變量
shell變量不區分類型,若是要指定變量類型也可用declare定義。
環境變量
1)全部環境變量都是系統全局變量,能夠用於全部子進程中。
2)環境變量用export導出,但若是不寫入指定配置文件(~/.bash_profile,~/.bash,/etc/bashrc,/etc/profile),退出命令行會丟失。
3)環境變量應使用大寫。
顯示環境變量:
set:輸出全部變量,包括全局變量、局部變量。
env:顯示環境變量。
declare:全部變量,函數,整數等。
set -o:全部參數配置信息。
unset消除本地變量和環境變量:
unset JAVA_
1.經過系統用戶登陸時的流程:
2.非登陸Shell
 只會加載~/.bashrc或者/etc/bashrc
 普通變量
定義本地變量
1 var_name1=12345                           #爲連續內容無需解析其餘變量時可不用引號
2 var_name2=‘Do you have time.‘             #用單引號,原樣輸出
3 var_name3="No, I‘m working."              #會對其中變量進行解析,其餘同單引號
4 var_name4=`ls -alh`                       #獲取命令結果
5 var_name5=$(ls -l)                        #同上
特殊位置參數變量
經常使用特殊位置參數說明:
 
 
進程中的特殊狀態變量:
 
進程中的特殊狀態變量:
 
 
用法:
1)判斷命令、腳本和函數是否執行成功
2)執行" exit 數字 " ,會返回數字給$?
3)在函數中" return 數字 ",效果同上
bash shell系統內置變量命令:
1)echo:在屏幕上輸出變量  命令格式 echo args  其中arges能夠是變量和字符串組合
2)eval: 
命令格式:eval args
功能:當shell程序執行到eval語句時,shell讀入參數args,並將它們組合成一個新的命令。
3)exec:
命令格式: exec 命令參數
功能:在不建立新的子進程前提下,轉去執行指定的命令,指定命令執行完畢後,終結該進程。
4)read:
命令格式: read  [參數] [變量名](該變量不能爲特殊變量)
功能:從標準輸入讀取字符串等信息,傳給shell內部定義的變量。
1 read -t 10 -p ‘Pls input the num: ‘ num
5)shilft:
命令格式:shilft—Shilft positional parameters
功能:在程序中每使用一次shilft語句,都會使全部位置參數向左移動一個位置。
6)exit:
退出shell,可選定一個數字做爲返回值。
 五)變量子串
 
 
 
六)特殊擴展變量
 
 
 
3、變量的數值計算
一)算術運算符
**:冪運算       其餘略
二)算術運算命令
 
 
 
變量名稱的規範
變量名不能用數字開頭
變量名中不能有小數點
變量名不能用純數字
變量名能夠是字母開頭再加數字
變量名中不能有斜槓「/」、「$」、「#」、「@」等特殊符號
相關文章
相關標籤/搜索