Linux Shell編程基礎

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。

發佈了9 篇原創文章 · 獲贊 1 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章