剛開始學的時候,都是一些基本的命令,總是無法把它們聯系到一塊去,現在剛開始接觸腳本,頓時感覺壓力好大,基礎命令如果記不牢,很有可能就掛了,下面我把近幾天學習的一些腳本命令及練習拿來分享一下,供大家參考,同時加深我的記憶。
首先是寫腳本的格式,我這里用vim編輯器來寫的腳本,因為它的色彩非常明艷,易于區分?;靖袷饺缦拢?/p>
#!/bin/bash 第一行一般為調用使用的語言,或者你使用的 shell
# —————————————- 下面就是注釋啦,,這個也很重要,都是要在腳本中寫的,便于以后查閱,有的不需要的可以選擇不寫
# Filename: hello.sh 程序名
# Revision: 1.1 版本號
# Date: 2017/06/01 更改日期
# Author: wang 作者
# Email: wang@gmail.com 郵箱
# Website: www.magedu.com 網站,可以查閱相關信息
# Description: This is the first script 描述該程序的作用,及注意事項
# Copyright: 2017 wang 版權
# License: GPL 許可證
echo “hello world” 腳本內容
寫完上面基本的注釋之后就可以安心寫自己的腳本內容了,腳本一般都是為實現某個特定的功能,簡化某些復雜的操作,這里就得引用一些變量來為我們簡化程序了。變量有些是系統中自帶的,還有些需要我們自己定義,一般定義變量是以字母、下劃線和數字定義的,但是不能以數字開頭,下面說一些常用的變量吧,當然變量也分好多種,有本地變量,環境變量,位置變量等,我每一種都會列舉一些,以便用的時候查閱。
本地變量:如A=123其中A就是本地變量,只能在當前shell 使用
環境變量:
PATH 顯示路徑,顯示可執行文件的搜索路徑
SHELL 顯示當前的shell
USER 顯示當前用戶
UID 顯示當前用戶的uid
HOME 顯示用戶的家目錄
PWD 顯示用戶當前處在哪個目錄下
SHLVL 顯示用戶當前出于幾級shell
LANG 顯示字符集
MAIL 顯示郵箱路徑
HOSTNAME 顯示主機名
HISTSIZE 可以設置保存的歷史命令條數
— 顯示上次執行的命令
位置變量:
$1, $2, …:對應第1、第2等參數, shift [n]換位置
$0: 命令本身
$*: 傳遞給腳本的所有參數,全部參數合為一個字符串
$@: 傳遞給腳本的所有參數,每個參數為獨立字符串
$#: 傳遞給腳本的參數的個數
$@ $* 只在被雙引號包起來的時候才會有差異
set — 清空所有位置變量
下面正式開始我的腳本之路,這將是一個痛并快樂的過程。
(1)寫一個能夠創建新腳本的Shell script,如名為createsh當執行時createsh /root/bin/test1.sh
則會自動創建并打開/root/bin/test1.sh,且其中包含以下內容。
答題:腳本內容如下:
運行時先給createsh加個執行權限,chmod +x createsh,然后再這樣執行
其中b.sh是我要創建的新文件名,這個名字可以隨意寫,執行之后就生成了一個名為b.sh的新文件了,里面還自動有了注釋和自動生成時間了。
解題思路:首先使用echo ,用引號引用一段你想要顯示的內容導入到$1中,$1就是你執行命令的第一個參數,>是輸出重定向,把內容給一個文件之后,在現有基礎上可以再編輯文件,最后給創建的新文件加上執行權限,也可以不加,這看個人愛好了。
(2)編寫腳本/root/bin/sumid.sh,計算/etc/passwd文件中的第10個用戶和第20用戶的ID之和
答題:由于上一題我們已經寫了一個快速創建腳本的命令,因此這一題我們可以使用那個命令
下面這個是用擴展正則表達式,看著好像比我的簡單,所以也列出來,以供以后參考。
這是我寫的第一種方法,是一種非常不靈巧的方法,但是我想著在沒有其他辦法的情況下,是可以使用這種辦法的。還有一種看起來好像比較容易的方法,我在這里也把它寫出來。
運行時是這樣的:
解題思路:第一種方法的解題思路非常簡單,cat –n /etc/passwd 的意思就是顯示passwd 的內容,并顯示行號,這樣便于后面的截取。第一個管道符后面的內容是截取以空格開頭的,后面不止一個空格,中間有數字10和20的行,這樣就把第10行和第20行截取下來了。第三個管道符就是截取uid部分了,這就很簡單了,關鍵是最后怎么計算它們的和,利用echo ` `把前面的結果輸入到bc中,以此來計算id之和。
第二種方法 就是單獨把第10行的算出來,把值賦給變量id10,這個變量是自己起的名字,前面呢有提到哦,然后再把第20行的結果賦給id20,最后相加就可以了。在最后記得用完之后把變量空間釋放,用unset 加變量名就可以了。
(3)編寫腳本/root/bin/sumspace.sh,傳遞兩個文件路徑作為參數給腳本,計算這兩個文件中所有空白行之和
答題:腳本內容如下:
解題思路:首先定義兩個變量s1,s2,因為是兩個文件,所以定義兩個變量,先說第一個變量的獲取過程,cat $1查看第一個文件,然后通過管道符把結果傳給下一個命令,接著通過grep截取行,這里注意的是^$在一塊表示空白行,最后wc –l顯示空白行數,變量二和變量一獲取的過程一樣,,這里就不多說了,最后一個命令是把兩個行數加一起,得到想要的結果,$[]用于運算。
第二種方法:
解題思路:這種方法比較簡單,首先使用cat $@命令,非常巧妙,把兩個文件內容合并到一起,注意,cat file1 file2時,是把兩個文件內容合并 到一起顯示的 ,容易被忽略,$@是把每個參數當做獨立字符串,合起來就是把兩個文件合并成一個文件顯示出來,接著管道符后面是把空行行數顯示出來 ,可以說這個思路非常巧妙,不過不是我寫的,是我借鑒別人的,我很佩服。
原創文章,作者:lll,如若轉載,請注明出處:http://www.www58058.com/83981