1.介紹shell腳本
簡單的說shell就是一個包含若干行Shell或者Linux命令的文件。對於一次編寫,多次使用的大量命令,就可以使用單獨的文件保存下來,
以便日後使用。通常shell腳本以.sh爲後綴。在編寫shell時,第一行一定要指明系統需要哪種shell解釋用戶的shell程序,如:#!/bin/sh,#!/bin/bash,#!/bin/csh,,#!/bin/tcsh和,#!/bin/ksh等。下面的run.sh則指明使用bash執行。
#!bin/bash
ls -l
通常,shell腳本會以#!/bin/sh作爲默認的shell程序。執行shell的方式有兩種:第一種是爲shell腳本加上可執行權限並執行,第二種是通過sh命令執行shell腳本,例如執行當前目錄下的run.sh腳本,命令如下:
//爲shell腳本直接加上可執行權限並執行
chmod 755 run.sh
./run.sh
//通過sh命令執行shell腳本
sh run.sh
2。輸入輸出重定向
Linux使用標準輸入stdin和標準輸出stdout,來表示每個命令的輸入和輸出,還使用一個標準錯誤輸出stderr用於輸出錯誤信息。這三個標準輸入輸出系統默認與控制終端設備相聯繫在一起的。因此,在標準情況下,每個命令通常從它的控制終端中獲取輸入,將輸出打印到控制終端的屏幕上。
但是可以重新定義程序的輸入stdin和輸出stdout,將它們重定向。www.linuxidc.com最基本的方法就是將它們重定義到一個文件上去,從一個文件獲取輸入/輸出到另外的文件中等。
2.1輸入重定向
輸入重定向使用小於號“<”可以實現。顯示文件的cat命令就是將標準輸入重定向到文件實現的。
//將/etc/fstab作爲輸入,重定向到cat命令
# cat /etc/fstab
LABEL=/ / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
none /dev/pts devpts gid=5,mode=620 0 0
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
/dev/hda3 swap swap defaults 0 0
/dev/cdrom /mnt/cdrom udf,iso9660 noauto,owner,kudzu,ro 0 0
/dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0
2.2輸出重定向
輸出重定向有兩種方式,一種是直接輸出,使用一個大於號“>”實現;另一種是以附加的方式輸出,使用兩個大於號“>>”實現。前者會覆蓋原始的輸出內容,而後者會添加到文件最後。以下通過實例說明其區別。
//ls命令重定向到/root/dir.txt並顯示
ls >dir.txt
cat < dir.txt
anaconda-ks.cfg
install.log
install.log.syslog
//ls -l命令以附加的方式重定向到/root/dir.txt並顯示
ls -l >>dir.txt
cat < dir.txt
anaconda-ks.cfg
install.log
install.log.syslog
總用量 24
-rw-r--r-- 1 root root 1245 7月22 21:07 anaconda-ks.cfg
-rw-r--r-- 1 root root 14522 7月22 21:01 intall.log
-rw-r--r-- 1 root root 2906 7月22 21:00 install.log.syslog
3。管道
管道和輸入輸出重定向十分類似。管道的作用是在一個命令的標準輸出和另一個命令的標準輸入之間建立一個通道。例如下面命令就是將ps -aux的標準輸出傳遞給grep作爲輸入。
ps -aux | grep httpd
4.shell裏的特殊字符
和其他編程語言一樣,shell裏也有特殊字符。常見的有美元符號($),反斜線(\)和引號。
1。美元符號
美元符號表示變量替換,即用其後面指定的變量的值來代替變量。反斜線“\”爲轉義字符,轉義字符告訴shell不要對其後面的那個字符進行特殊處理,只是當做普通字符。而shell下的引號情況比較複雜,分爲三種:雙引號("),單引號(')和倒引號(`)。他們的作用都不盡相同,以下一一說明。
2。雙引號(")
由雙引號括起來的字符,除$,倒引號(`)和反斜線(\)仍保留其特殊功能外,其餘字符均作爲普通字符對待。
3。單引號(')
由單引號括起來的字符都作爲普通字符出現。
4。倒引號(`)
由倒引號括起來的字符串被shell解釋爲命令行,在執行時,shell會先執行該命令,並以它的標準輸出結果取代整個引號部分。
示例1的代碼及輸出如下:
#echo "My current directory is `pwd` and logname is $LOGNAME" 【雙引號中的倒引號保和美元符號持原來的功能】
My current directory is /root and logname is root
示例2的代碼及輸出如下:
#echo "My current directory is `pwd` and logname is \$LOGNAME" 【雙引號中的轉義字符保持原來的功能】
My current directory is /root and logname is $LOGNAME
示例3的代碼及輸出如下:
#echo 'My current directory is `pwd` and logname is $LOGNAME' 【單引號裏面的內容不變】
My current directory is `pwd`and logname is $LOGNAME
5。shell腳本的註釋
shell腳本和其它編程語言一樣,也擁有註釋。註釋方法爲在註釋行前加#號。
例如以下腳本:
#!/bin/sh
#Filename: comment.sh
#Description:this script explains how to make a comment
echo “This script explains how to make a comment ”
當然首行的#!/bin/sh屬於特例,因爲這一行同時指明瞭運行該腳本的shell。