這篇隨筆將要介紹關於Shell編程的基本知識,這些將會在假設你已經熟悉了Linux系統和命令行的基本知識。shell
構建基本腳本
你應該瞭解或熟悉使用Shell命令行了,可是隻是使用Shell命令行的命令,有些問題處理起來又會顯得繁瑣,當你要常常重複處理相似複雜的事的時候,
那麼將它寫成一個腳本就是一個不錯的主意。
固然在命令行中,你能夠將兩個命令在一個提示行中輸入他們,用分號隔開。
編程$ pwd;where
/tmp
forever :0 2017-11-08 15:12 (:0)
forever pts/0 2017-11-08 15:12 (:0)
$
這就是一個簡單的腳本,可是這樣的腳本每次都要將全部要執行的命令都放在命令行中,也許一個很小的腳本你能夠接受,可是若是是一個很複雜的腳本,我想那就不會是你想要的了。
建立腳本文件
那麼既然你不想將全部的命令都寫在命令行上,那麼就將這些命令都寫在一個文件中,那麼只須要你運行這個文件就能夠了。
在寫一個Shell腳本文件的時候,你必定要作的是在第一行,要指定使用的Shell,以下:
#!/bin/bash
這裏就告訴你要使用 bash shell 來運行你的腳本程序。
咱們就將剛纔的簡單的腳本寫成腳本文件。
bash#!/bin/bash
pwd
who
將文件命名爲shell1,如今你就要運行這個腳本文件了,可是它可能不如你所想,咱們能夠試試看。
$shell1
bash: shell1: 未找到命令...
$
bash shell並無找到你寫的這個命令,由於你寫的腳本所在的目錄,並不在PATH環境變量中。
爲了解決這個問題,有兩個辦法:
1、把你當前的目錄添加到PATH中。
2、用絕對路徑或相對路徑引用Shell腳本文件。
我想在如今的狀況下將這個腳本的目錄添加到PATH並非一個好辦法,那麼就使用第二種方法,當前目錄用點操做符來表示。
$./shell1
bash: ./shell1: 權限不夠
$
哇居然權限不夠,查看一下文件權限就能夠知道,文件建立的時候的權限就以已經由你的umask的值決定了
$ ls -l shell1
-rw-rw-r--. 1 forever forever 21 11月 8 16:24 shell1
$
那咱們就該shell1添加執行的權限。
chmod u+x shell1
如今再執行試試看
$ ./shell1
/tmp
forever :0 2017-11-08 15:12 (:0)
forever pts/0 2017-11-08 15:12 (:0)
$
顯示消息
有的時候你須要在你腳本中給用戶一些信息,如何讓這些信息顯示。
那你就要用到了 echo 命令,echo命令自己就是顯示一個字符串。
命令行$echo Hello
Hello
$
默認狀況下 echo 後面直接加上你要輸出的字符串就能夠,可是有的時候就不如你所願。
$ echo Let's go home
'
Lets go home
$
由於在你出現引號的時候它認爲引號中的都是一部分,因此在出現單出來的引號的時候,就要讓你把引號補全,因此若是出現其中一種引號就須要在最外面用另外一種引號把字符串所有包起來。
$ echo "Let's go home"
Let's go home
$
如今咱們將這個命令加到腳本文件中。
#!/bin/bash
echo "Welcome to use my shell!"
$ ./shell1
Welcome to use my shell!
$
如今想加入時間但我不想輸出換行那麼就加上-n
參數。
#!/bin/bash
echo "Welcome to use my shell!"
echo -n "The time and data are:"
date
code
$ ./shell1
Welcome to use my shell!
The time and data are:2017年 11月 08日 星期三 17:21:44 CST
$
變量
有的時候只是使用單個命令並不能解決全部問題,而是須要其餘數據來解決一些問題,這就能夠經過變量來解決了。
在Linux系統中就存在這不少的變量,這些變量是環境變量,在變量前加上$
符號就可使用了。
字符串#!/bin/bash
echo "Your PATH is:"
echo $PATH
qt
$ ./shell2
Your PATH is:
/usr/lib64/qt-3.3/bin:/home/forever/perl5/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/forever/.local/bin:/home/forever/bin
$
#!/bin/bashdays=365
echo "if you try to think of the year as $days days ,it becomes unmanageable."
it
$ ./shell3
if you try to think of the year as 365 days ,it becomes unmanageable.
$
#!/bin/bashvalue1=10
value2=20
echo "value1 is $value1"
echo "value2 is $value2"
value1=$value2
echo "value1=\$value2 value1=$value1"
value2=value1
echo "value2=value1 value2=$value2"
變量
$ ./shell3
value1 is 10
value2 is 20
value1=$value2 value1=20
value2=value1 value2=value1
$
#!/bin/bashwhere=`pwd`
echo "You are in $where"
date
$ ./shell4
You are in /tmp
$
未完待續......