標籤:linux shell指令碼基礎篇
1. 簡介
shell(殼)是linux系統中用於將使用者執行的命令解析成電腦能夠執行的代碼,然後交給核心由核心進行執行。通過/etc/shells檔案中可以查看該linux系統所支援的shell種類。
shell指令碼就是將平時寫的一些命令按一定順序儲存到檔案中,然後在賦予該檔案執行許可權就是一個shell指令碼。
2. shell指令碼的格式
[[email protected] ~]# vi shell.sh //使用vi編輯器進行編寫shell指令碼
#!/bin/bash //指定所指定的那種shell
#this is a test shell scripts //對該指令碼的說明
x=1
echo $x //為該指令碼的內容
3. shell指令碼的有以下幾種執行方式
1) [[email protected] ~]# sh shell.sh
1
2) [[email protected] ~]# . shell.sh
1
3) [[email protected] ~]# source shell.sh
1
4) [[email protected] ~]# ./shell.sh
-bash: ./shell.sh: 許可權不夠
[[email protected] ~]# chmod a+x ./shell.sh
[[email protected] ~]# ./shell.sh //直接執行需要給該檔案授予執行許可權
1
4. linux在處理資料時有下面幾種互動裝置檔案
標準輸入(STDIN) 檔案裝置編號為 0
標準輸出(STDOUT) 檔案裝置編號為 1
標準錯誤(STDERR) 檔案編號為 2
5. 重新導向
重新導向:如原本將標準輸出的資料顯示到螢幕,但是通過重新導向“>”符號將標準資料的檔案傳送到指定的檔案中。
[[email protected] ~]# cat ./shell.sh > cdx.txt //大於符號表示標準輸出
[[email protected] ~]# cat cdx.txt
#!/bin/bash
#this is a test shell scripts
x=1
echo $x
[[email protected] ~]# ls -l /jjj 2> stderr.txt //通過檔案編號2將上重新導向符號將錯誤資訊匯入到指定檔案中
[[email protected] ~]# cat stderr.txt
ls: 無法訪問/jjj: 沒有那個檔案或目錄
[[email protected] ~]# echo "abc123" > passwd.txt
[[email protected] ~]# passwd --stdin test < passwd.txt //通過通過小於符號將秘鑰匯入到test帳號中
6. 管道符號
可以將前一個命令的值作為後一個命令的參數,可以對該值進行連續操作。
[[email protected] ~]# ifconfig eth0 | grep "HWaddr" | awk ‘{print $5}‘
00:0C:29:3A:A0:9A
7. shell變數
shell變數有下列幾種變數:1.自訂變數 2.環境變數 3.位置變數 4.預定義變數
1) 自訂變數,使用者可以直接賦值
[[email protected] ~]# a=1 //直接給a賦值為1
[[email protected] ~]# echo $a
1
2) 變數和賦值使用的特殊符號
雙引號""當賦值的時候有空格時需要通過雙引號指定為一個整體
[[email protected] ~]# b="abc def"
[[email protected] ~]# echo $b
abc def
單引號賦值的時候有特殊字元時,需要通過單引號將括弧中的特殊變成一般字元[[email protected] ~]# [[email protected] ~]# d=‘$abc‘
[[email protected] ~]# echo $d
$abc
反撇號和“$()”可以對括弧中的語句先執行
[[email protected] ~]# rpm -qf $(which cat)
coreutils-8.4-19.el6.i686
[[email protected] ~]# rpm -qf `which cat`
coreutils-8.4-19.el6.i686
3) 位置變數
他根據參數的位置分為$1,$2,$3......$9,$0為命令的變數。
[[email protected] ~]# vi expr.sh
#!/bin/bash
#express scripts
expr $1 + $2 //指定$1和$2
[[email protected] ~]# sh expr.sh 12 23 //給$1和$2賦值
35 //計算結果
4) 預定義變數
$?:查看上一個命令執行的狀態,如果值為0 表示命令執行完成。如果值為非0 表示上一個命令執行時有問題
$0:表示當前執行的指令碼或程式的名稱。
$#: 表示命令列中位置參數的個數
$*:表示所有位置參數的內容
本文出自 “知識是智慧的火炬” 部落格,轉載請與作者聯絡!
Shell指令碼(一)