您好,登錄后才能下訂單哦!
小編給大家分享一下Shell腳本是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
前言
Shell Script,Shell腳本與Windows及Dos下的批處理相似,也就是用各類命令預先放入到一個文件中,方便一次性執(zhí)行的一個程序文件,主要是方便管理員進行設(shè)置或者管理用的。但是它比Windows下的批處理更強大,比用其他編程程序編輯的程序效率更高,畢竟它使用了Linux/Unix下的命令。shell script是利用shell的功能所寫的一個程序,這個程序是使用純文本文件,將一些shell的語法與指令寫在里面,然后用正規(guī)表示法,管道命令以及數(shù)據(jù)流重導向等功能,以達到我們所想要的處理目的。
更明白地來說,shell script就像早期dos年代的.bat,最簡單的功能就是將許多指令匯整寫一起,讓使用者很容易地就能夠一個操作執(zhí)行多個命令,而shell script更是提供了數(shù)組,循環(huán),條件以及邏輯判斷等重要功能,讓使用者可以直接以shell來寫程序,而不必使用類似C程序語言等傳統(tǒng)程序編寫的語法。
概念區(qū)別
Shell和Shell腳本有什么區(qū)別?確切一點說,Shell就是一個命令行解釋器,它的作用就是遵循一定的語法將輸入的命令加以解釋并傳給系統(tǒng)。它為用戶提供了一個向Linux發(fā)送請求以便運行程序的接口系統(tǒng)級程序,用戶可以用Shell來啟動、掛起、停止甚至是編寫一些程序。 Shell本身是一個用C語言編寫的程序,它是用戶使用Linux的橋梁。Shell既是一種命令語言,又是一種程序設(shè)計語言(就是你所說的shell腳本)。作為命令語言,它互動式地解釋和執(zhí)行用戶輸入的命令;作為程序設(shè)計語言,它定義了各種變量和參數(shù),并提供了許多在高階語言中才具有的控制結(jié)構(gòu),包括循環(huán)和分支。它雖然不是 Linux系統(tǒng)內(nèi)核的一部分,但它調(diào)用了系統(tǒng)內(nèi)核的大部分功能來執(zhí)行程序、創(chuàng)建文檔并以并行的方式協(xié)調(diào)各個程序的運行。
一、Shell腳本的基本語法
1、編寫個簡單的shell腳本
[root@xj ~]# vim example.sh
#!/bin/bash
#This is to show waht a example looks like.
echo "our first example"
echo "we are currently in the following directroy"
pwd
echo "This directory contains the following files"
ls
[root@xj ~]# chmod +x example.sh //給腳本賦予可執(zhí)行權(quán)限
[root@xj ~]# ./example.sh //執(zhí)行運行
2、創(chuàng)建和執(zhí)行shell腳本的基本步驟
二、Shell腳本的變量
1、什么是變量
變量來源于數(shù)學,是計算機語言中能儲存計算結(jié)果或能表示值抽象概念。變量可以通過變量名訪問。在指令式語言中,變量通常是可變的;但在純函數(shù)式語言(如Haskell)
中,變量可能是不可變(immutable)的。在一些語言中,變量可能被明確為是能表示可變狀態(tài)、具有存儲空間的抽象(如在Java和Visual Basic中);但另外一些語言可能使用其它概念(如C的對象)來指稱這種抽象,而不嚴格地定義“變量”的準確外延。
2、Shell變量
Shell中變量是傳遞數(shù)據(jù)的一種方法。變量是用來代表每個值的符號名
Shell中有兩類變量:臨時變量和永久變量。
擴展:
自定義環(huán)境變量
[root@xj ~]# mv example01.sh /etc/sysconfig/
[root@xj ~]# export PATH=/etc/sysconfig:$PATH
[root@xj ~]# echo $PATH
/etc/sysconfig:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
注:這種方式一旦終端關(guān)閉后,就會失效,要想修改永久生效,可以修改用戶目錄下.bashrc文件,在此文件的最后一行添加export PATH=/etc/sysconfig:$PATH保存退出。
[root@localhost ~]# source .bashrc
執(zhí)行.bashrc后不報錯,則表示成功!
用戶定義變量:由字母或下劃線打頭,由字母、數(shù)字或下劃線組成,區(qū)分大小寫并且大小寫字母意義不同。變量名長度沒有限制。
使用變量值時,應在變量名前加上“$”符號。
例如:
[root@xj ~]# 123=abc
bash: 123=abc: command not found…
變量賦值:變量=值,賦值號“=”兩邊不加空格,否則提示錯誤。
[root@xj ~]# a = 1
bash: a: command not found…
正確方式如下:
[root@xj ~]# name=rm
[root@xj ~]# NAME=mk
[root@xj ~]# echo $NAME
mk
[root@xj ~]# echo $name
rm
3、變量的運用
例:將一個命令的執(zhí)行結(jié)果賦給變量
[root@xj ~]# A=`date`
[root@xj ~]# echo $A
Tue Mar 8 21:12:45 CST 2016
[root@xj ~]# B=$(date)
[root@xj ~]# echo $B
Tue Mar 8 21:13:33 CST 2016
變量值的可傳遞性
[root@xj ~]# A=`date`
[root@xj ~]# C=$A
[root@xj ~]# echo $C
Tue Mar 8 21:12:45 CST 2016
可以利用變量和其它字符組成一個新的字符串
[root@xj ~]# MYDIR=/home/rm/
[root@xj ~]# echo $MYDIR
/home/rm/
[root@xj ~]# echo $MYDIRzhangsan
輸出內(nèi)容為空
[root@xj ~]# echo ${MYDIR}zhangsan
/home/rm/zhangsan
給變量賦值多個單詞:
[root@xj ~]# NAME="mk docker"
[root@xj ~]# echo $NAME
mk docker
[root@xj ~]# NAME="rm $NAME"
[root@xj ~]# echo $NAME
rm mk docker
[root@xj ~]# NAME='rm $NAME'
[root@xj ~]# echo $NAME
rm $NAME
單引號和雙引號的區(qū)別:單引號將變量之間的內(nèi)容原封不動地指定給變量。雙引號取消了空格的作用,保留特殊符號的含義。
刪除變量:
[root@xj ~]# echo $NAME
rm $NAME
[root@xj ~]# unset NAME
[root@xj ~]# echo $NAME
4、Shell腳本中的位置變量與特殊變量
位置變量:Shell解釋執(zhí)行用戶的命令時,將命令行的第一個字作為命令名,而其它字作為參數(shù)。由出現(xiàn)在命令行上的位置確定的參數(shù)稱為位置參數(shù)。
位置變量:使用$N來表示
[root@xj ~]# vim b.sh
#!/bin/bash
echo "第一個目錄是$1"
echo "第二個目錄是$2"
[root@xj ~]# chmod +x b.sh
[root@xj ~]# ./b.sh /home/ /etc/
第一個目錄是/home/
第二個目錄是/etc/
$0 這個程序的文件名 example.sh
$n 這個程序的第n個參數(shù)值,n=1..N
特殊變量:
有些變量是一開始執(zhí)行Script腳本時就會設(shè)定,且不能被修改,但我們不叫它只讀的系統(tǒng)變量,而叫它特殊變量。這些變量當一執(zhí)行程序時就有了,以下是一些等殊變量:
$* 這個程序的所有參數(shù)
$# 這個程序的參數(shù)個數(shù)
$$ 這個程序的PID
$! 執(zhí)行上一個后臺程序的PID
$? 執(zhí)行上一個指令的返回值
[root@xj ~]# vim z.sh
#!/bin/bash
echo "$* 表示這個程序的所有參數(shù)"
echo "$# 表示這個程序參數(shù)的個數(shù)"
touch /root/a.txt
echo "$$ 表示這個程序的PID"
touch /root/b.txt &
echo "$! 表示上一個后臺指令的PID"
echo "$$ 表示程序的進程PID"
[root@xj ~]# ./z.sh aaa bbb ccc
aaa bbb ccc 表示這個程序的所有參數(shù)
3 表示這個程序參數(shù)的個數(shù)
39839 表示這個程序的PID
39841 表示上一個后臺指令的PID
39839 表示程序的進程PID
例:變量在shell中的使用
[root@xj ~]# vim z1.sh
#!/bin/bash
var1="abcd efg"
echo $var1
var2=1234
echo "The value of var2 is $var2"
echo $HOME
echo $PATH
echo $PWD
[root@xj ~]# chmod +x z1.sh
[root@xj ~]# ./z1.sh
abcd efg
The value of var2 is 1234
/root
/etc/sysconfig:/etc/sysconfig:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
/root
三、shell中的命令
1、Read命令的使用
作用:從鍵盤讀入數(shù)據(jù),賦給變量
[root@xj ~]# read a b c
1 22 33
[root@xj ~]# echo $a $b $c
1 22 33
read與參數(shù)-p -n -t結(jié)合使用
-p(提示語句)
-n(字符個數(shù))
-t(等待時間)
[root@xj ~]# read -p "請輸入你的準考證號: " ID
請輸入你的準考證號: 20160308
[root@xj ~]# echo $ID
20160308
[root@xj ~]# vim read.sh
#!/bin/bash
read -p "請輸入你的姓名:" NAME
read -p "請輸入你的年齡:" AGE
read -p "請輸入你的性別:" SEX
echo "你的基本信息如下:"
echo "姓名:$NAME"
echo "年齡:$AGE"
echo "性別:$SEX"
[root@xj ~]# chmod +x read.sh
[root@xj ~]# ./read.sh
請輸入你的姓名:孫悟空
請輸入你的年齡:500
請輸入你的性別:男
你的基本信息如下:
姓名:孫悟空
年齡:500
性別:男
2、expr命令的使用
作用:Shell變量的算術(shù)運算:
§ expr命令:對整數(shù)型變量進行算術(shù)運算
語法:expr 表達式 //注意:運算符之間要有空格
[root@xj ~]# expr 3 + 2
5
[root@xj ~]# expr 8 – 3
5
[root@xj ~]# expr 8 / 4
2
[root@xj ~]# expr 8 \* 4
32
[root@xj ~]# expr 8 % 3
2
注:%取余運算
結(jié)合變量使用運算符
[root@xj ~]# var1=16
[root@xj ~]# var2=4
[root@xj ~]# expr $var1 – $var2
12
3、算數(shù)運算符在shell腳本中的使用
[root@xj ~]# vim expr.sh
#!/bin/bash
read -p "Please input the value of a " a
read -p "Please input the value of b " b
read -p "Please input the value of c " c
value1=`expr $a + $b + $c`
echo "The value of value1 is $value1"
value2=`expr $c / $b`
echo "The value of value2 is $value2"
value3=`expr $c \* $b`
echo "The value of value3 is $value3"
value4=`expr $a + $c / $b`
echo "The value of value4 is $value4"
[root@xj ~]# ./expr.sh
Please input the value of a 10
Please input the value of b 20
Please input the value of c 30
The value of value1 is 60
The value of value2 is 1
The value of value3 is 600
The value of value4 is 11
復雜運算
[root@xj ~]# expr $(expr $(expr 5 + 11) / $var3) + 4
12
以上是“Shell腳本是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。