在Linux下,如果你需要執(zhí)行shell腳本,那么應(yīng)該使用那個命令呢?下面由我為大家整理了linux shell腳本執(zhí)行命令的相關(guān)知識,希望對大家有幫助!
創(chuàng)新互聯(lián)公司是專業(yè)的喀什網(wǎng)站建設(shè)公司,喀什接單;提供網(wǎng)站設(shè)計、成都做網(wǎng)站,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行喀什網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!
linux shell腳本執(zhí)行
linux shell腳本執(zhí)行方法一: 切換到shell腳本所在的目錄(此時,稱為工作目錄)執(zhí)行shell腳本:
cd /data/shell
./hello.sh
./的意思是說在當(dāng)前的工作目錄下執(zhí)行hello.sh。如果不加上./,bash可能會響應(yīng)找到不到hello.sh的錯誤信息。因為目前的工作目錄(/data/shell)可能不在執(zhí)行程序默認(rèn)的搜索路徑之列,也就是說,不在環(huán)境變量PASH的內(nèi)容之中。查看PATH的內(nèi)容可用 echo $PASH 命令。現(xiàn)在的/data/shell就不在環(huán)境變量PASH中的,所以必須加上./才可執(zhí)行。
linux shell腳本執(zhí)行方法二: 以絕對路徑的方式去執(zhí)行bash shell腳本:
/data/shell/hello.sh
linux shell腳本執(zhí)行方法三: 直接使用bash 或sh 來執(zhí)行bash shell腳本:
cd /data/shell
bash hello.sh
或
cd /data/shell
sh hello.sh
注意,若是以方法三的方式來執(zhí)行,那么,可以不必事先設(shè)定shell的執(zhí)行權(quán)限,甚至都不用寫shell文件中的第一行(指定bash路徑)。因為方法三是將hello.sh作為參數(shù)傳給sh(bash)命令來執(zhí)行的。這時不是hello.sh自己來執(zhí)行,而是被人家調(diào)用執(zhí)行,所以不要執(zhí)行權(quán)限。那么不用指定bash路徑自然也好理解了啊。
linux shell腳本執(zhí)行方法四: 在當(dāng)前的shell環(huán)境中執(zhí)行bash shell腳本:
cd /data/shell
. hello.sh
或
cd /data/shell
source hello.sh
前三種方法執(zhí)行shell腳本時都是在當(dāng)前shell(稱為父shell)開啟一個子shell環(huán)境,此shell腳本就在這個子shell環(huán)境中執(zhí)行。shell腳本執(zhí)行完后子shell環(huán)境隨即關(guān)閉,然后又回到父shell中。而方法四則是在當(dāng)前shell中執(zhí)行的。
linux shell 重啟命令有五個,分別如下:
1、shutdown。
2、poweroff。
3、init。
4、reboot。
5、halt。
Linux,全稱GNU/Linux,是一種免費使用和自由傳播的類UNIX操作系統(tǒng),其內(nèi)核由林納斯·本納第克特·托瓦茲于1991年10月5日首次發(fā)布,它主要受到Minix和Unix思想的啟發(fā),是一個基于POSIX的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng)。
相關(guān)簡介
Linux不僅系統(tǒng)性能穩(wěn)定,而且是開源軟件。其核心防火墻組件性能高效、配置簡單,保證了系統(tǒng)的安全。在很多企業(yè)網(wǎng)絡(luò)中,為了追求速度和安全,Linux不僅僅是被網(wǎng)絡(luò)運維人員當(dāng)作服務(wù)器使用,甚至當(dāng)作網(wǎng)絡(luò)防火墻,這是Linux的一大亮點。
Linux具有開放源碼、沒有版權(quán)、技術(shù)社區(qū)用戶多等特點,開放源碼使得用戶可以自由裁剪,靈活性高,功能強大,成本低。尤其系統(tǒng)中內(nèi)嵌網(wǎng)絡(luò)協(xié)議棧,經(jīng)過適當(dāng)?shù)呐渲镁涂蓪崿F(xiàn)路由器的功能。這些特點使得Linux成為開發(fā)路由交換設(shè)備的理想開發(fā)平臺。
ps?-eaf?|grep?tomcat?|grep?-v?grep?/dev/null?21
分為4段
1、ps -eaf 查看當(dāng)前進(jìn)程,-e 顯示所有進(jìn)程,a顯示終端上的所有進(jìn)程,包括其他用戶的進(jìn)程,f 全格式。
2、顯示的結(jié)果通過管道“|”傳給第二段 grep tomcat,查找tomcat進(jìn)程。
3、同樣查找的結(jié)果傳給第三段 grep -v grep,-v?不顯示匹配的行,因為用grep查詢tomcat的時候也算一個進(jìn)程,而ps的時候該進(jìn)程信息中也包含了tomcat,例如:
root??????2317??0.0??0.0???5980???744?pts/4????S+???15:00???0:00?grep?tomcat
所以用grep -v grep把這條過濾掉。
4、第四段 /dev/null 21,將顯示結(jié)果(默認(rèn)是正確輸出,即1)重定向到/dev/null中去,2代表錯誤輸出,也和1一樣。Linux中0代表輸入stdin,1代表輸出stdout,2代表錯誤輸出stderror。
每運行一個命令,該命令都會有一個返回值給shell,你可以在終端中試試ls,然后echo $?查看返回值,肯定是0,如果ls 一個不存在的文件,再看,肯定不是0。以此判斷上一條命令是否執(zhí)行成功。
if?[?$??-eq?0?];?then
判斷上一條命令的返回值是否等于(-eq) 0,即是否運行成功。
Shell腳本基本知識
概述:shell其實是內(nèi)核與用戶之間的一個接口,
shell腳本
如果有一系列經(jīng)常使用的linux命令,你可以把它們存儲在一個文件腫。shenll可以讀取這個文件,并執(zhí)行其中的命令。這樣的文件成為腳本文件。
執(zhí)行shell腳本
要創(chuàng)建一個shell腳本,你要使用任何編輯器比如vi在文本文件中編寫他。
為了使用bash shell賴執(zhí)行腳本magic,其命令是:bash magic或者./magic
echo命令:
echo “this is an example of the echo command!”
屏幕上就會回顯“this is an example of the echo command!”
#符號
用于在shell腳本腫可以包含注解入口
echo “hello”
#this is a comment line. this would not produce any output!
echo “world!”
第二行是一個注解的例子。它將被shell忽略,而且不產(chǎn)生任何消息
變量:
可以在任何時間通過簡單的賦值來創(chuàng)建。
語法:
variable name-value
Linux 中的所有變量都被當(dāng)作字符串
引用變量:
$符號用于引用一個變量的內(nèi)容
variable1 = ${variable2}
讀入值給變量
在執(zhí)行shell腳本時,shell還允許用戶直接從鍵盤讀入一個值給變量,還可以使用read命令來作。
$read fname
本地和全局shell變量
局部變量
當(dāng)引用shell時,只有創(chuàng)建它的shell能夠知道變量的存在
全局變量
稱為子shell
shell中創(chuàng)建的變量局部于創(chuàng)建它的shell,除非使用export命令特別指出是全局的。
環(huán)境變量:
通過改變這些變量的值,用戶能夠定制此環(huán)境
一些環(huán)境變量的例子是HOME,PATH,PS1,PS2,LOGNAME,SHLVL,及SHELL
HOME變量
Linux系統(tǒng)中的每個用戶都有一個相關(guān)的稱作HOME的目錄
當(dāng)一個用戶登錄后,進(jìn)入相應(yīng)的HOME的目錄
$ echo $HOME
PATH變量
包含一列用冒號定界的目錄的路徑名字,便于可執(zhí)行程序的搜索。
PS1變量
PS1(Prompt String 1)變量包含了shell提示符,$符號
$ PS1 = “HELLO”
HELLO
PS2變量
是為第二個提示符設(shè)置值的環(huán)境變量
LOGNAME變量
包含用戶的注冊名字
$echo “${LOGNAME}”
SHLVL 變量
該變量包含當(dāng)前工作的shell level
SHELL變量
環(huán)境變量存儲了用戶缺省的shell
env命令
可用來查看所有的已移出的環(huán)境變量表和它們各自的值!
命令替換
在單個命令行中使用多個命令的另外一種方法(非Pipes)是通過命令替換
echo “the data is `date`”
expr命令
用于求之算術(shù)表達(dá)式。該命令的輸出被送到標(biāo)準(zhǔn)輸出
$ expr 4 + 5
將在屏幕上顯示9
算術(shù)展開:
你可以在$((…)) 中括一個表達(dá)式,用下面的命令來計算它的值;
$((expression))
example1
編寫一個shell腳本用于計算呼叫中心未應(yīng)答的詢問的數(shù)量。該腳本應(yīng)該接受一天那所報告的詢問的總數(shù)和應(yīng)答的詢問的數(shù)量,以便計算未應(yīng)答的詢問的數(shù)量。
所有未應(yīng)答的詢問總數(shù)=所有詢問的總數(shù)-應(yīng)答的詢問的數(shù)量
!--[if !supportLists]--※ !--[endif]--※※※※※※※※※※※※※※※※※※※※※※※
條件執(zhí)行
test和[]
求值表達(dá)式,并返回true(0)或false()
數(shù)值測試:
-eq 等于則為真
-ne 不等于則為真
-gt 大于則為真
-ge 大于等于則為真
-lt 小于則為真
-le 小于等于則為真
if構(gòu)造
Linux shell提供了循環(huán)和判定的構(gòu)造,可以在shell腳本中使用
算術(shù)測試
結(jié)合if構(gòu)造,它可以用于測試變量的數(shù)字值
串測試
test命令也可以用于字符串
= 等于則為真
!= 不相等則為真
-z 字符串 長度為零則為真
-n 字符串 長度不為零則為真
文件測試
test命令也可以用于檢查文件的狀態(tài)
-e 文件存在則為真
-r 文件存在并且可讀則為真
-w 文件存在并且可寫則為真
-x 文件存在并且可執(zhí)行則為真
-s 文件存在并且至少有一個字符則為真
-d 文件存在并且為目錄則為真
-f 文件存在并且為普通文件則為真
-c 文件存在并且為字符型文件則為真
-b 文件存在并且為塊特殊文件則為真
-a并且 -o或者 !非
exit命令
用于終止shell腳本的執(zhí)行并返回到$提示符下
case 。。。esac
shell腳本中使用的這個構(gòu)造依據(jù)變量的值而執(zhí)行一組特定指令
當(dāng)變量的值和其中的一個值匹配的時候,就執(zhí)行寫在該值下的一組命令。
example3
迭代
while構(gòu)造
while 條件
do
命令(s)
done
只有條件為真的時候,才能執(zhí)行do與done之間的命令
until構(gòu)造
until循環(huán)構(gòu)造的求值模式于while循環(huán)相反
until循環(huán)將繼續(xù)執(zhí)行直到求值的條件為真的時候
for構(gòu)造
for variable_name in list_of_values
do
…
done
for循環(huán)取一列值作為輸入并對循環(huán)中每個值執(zhí)行循環(huán)
break和contineu命令
同其他語言中的用法
example4
控制進(jìn)程的執(zhí)行
請求后臺處理
用于請求后臺進(jìn)程的符號是 ()
$ wc tempfile
[1] 2082
$ vi newfile
檢查后臺進(jìn)程
ps(進(jìn)程狀態(tài))命令為每個當(dāng)前的活動的每個進(jìn)程產(chǎn)生一行入口。
終止后臺進(jìn)程
可用kill,如下所示
kill 278
查看完成一個命令所花的時間
你可以使用time命令來查看一個命令從開始到結(jié)束所花的時間
time fine /etc –name “passwd” 2 /dev/null /dev/null表明忽略錯誤信息。
管道的介紹
垂直條(|)是管道字符
它只是shell:“|”前面命令的輸出作為“|”之后命令的輸入發(fā)送
ls –l | more
用管道組合命令,功能強大
1、準(zhǔn)備鏡像(輸入cat /etc/redhat-release可以查看redhat版本) #輸入uname -r可以查看linux系統(tǒng)版本
根據(jù)查看的版本去網(wǎng)上下載相關(guān)資源。例如本機(jī)是7.2.
2、輸入virt-manager進(jìn)入虛擬機(jī)控制平臺
點擊小電腦圖標(biāo)
我們選擇第一個選項(通過iso image或者光盤進(jìn)行安裝)
然后找到剛剛下載好的鏡像。
名字和內(nèi)存都隨自己更改。
3、更改時區(qū),語言,安裝方式(真機(jī)須選3個關(guān)于虛擬化的選項)。
時區(qū)選擇上海即可
加入中文簡體
一般選擇最后一個,安裝一些必要的程序即可。
4、分區(qū)(建議自動分區(qū),然后修改分配容量)
(1)/boot ---啟動分區(qū),200M即可,太大沒有什么作用
(2)/swap ---交換分區(qū),當(dāng)內(nèi)存容量大于內(nèi)存80%時,把多余的放進(jìn)硬盤,待內(nèi)存降下來之后,又放回內(nèi)存,建議分區(qū)大小為物理內(nèi)存1.5~2倍,8G可設(shè)12G。
(3)/ ---其余分區(qū)皆為即可。
接下來等待安裝即可。
二 創(chuàng)建腳本安裝虛擬機(jī)
在 /usr/sbin/建立一個Create_Vm.sh
chmod +x Create_Vm.sh ---加可執(zhí)行權(quán)限
加在后臺運行,不加在前臺(創(chuàng)建虛擬機(jī))
#!/bin/bash
virt-install \
--name $1 \
--ram 1024 \
--file /var/lib/libvirt/images/$1.qcow2 \
--file-size 8 \
--cdrom /home/kiosk/Desktop/rhel-server-7.2-x86_64-dvd.iso \
--vcpus 1
寫入如下腳本:
如果是無圖形界面則依次輸入12cc即可
xml ---可擴(kuò)展標(biāo)記語言 ,封裝數(shù)據(jù)
模擬拷貝虛擬機(jī)
1 cd /etc/libvirt/qemu/ ---進(jìn)入虛擬機(jī)目錄
2 ls ---顯示該目錄文件項
3 cp node1.xml /mnt/ ---復(fù)制(發(fā)送)前端文件(硬件相關(guān)信息)到目標(biāo)主機(jī)
4 cd var/lib/libvirt/images/ ---進(jìn)入到虛擬機(jī)硬盤所在目錄
5 ls
6 mv node1.qcow2 /mnt/ ---復(fù)制硬盤到目標(biāo)主機(jī)
7 virsh undefine node1 ---刪除原有虛擬機(jī)(在復(fù)制到其他機(jī)器上忽略此步驟)
8 mv /mnt/node1.qcow2 /var/lib/libvirt/images/ ---復(fù)制硬盤到虛擬機(jī)默認(rèn)硬盤所在目錄
9 virsh define node1.xml ---創(chuàng)建復(fù)制虛擬機(jī)
9 virsh create node1.xml ---打開復(fù)制過來的虛擬機(jī),關(guān)閉之后在manager會消失
打開虛擬機(jī)相關(guān)命令:
virsh list ---顯示當(dāng)前正在運行的虛擬機(jī)
virsh list --all ---顯示所有虛擬機(jī)
virsh start node1 ---打開虛擬機(jī)
virt-viewer node1 ---顯示圖形界面
virsh shutdown node1 ---正常關(guān)機(jī)
virsh destroy node1 ---強制關(guān)機(jī)
剩下就不一一列舉了
三 虛擬機(jī)快照:(以安裝node1為例)
1、 cd /var/lib/libvirt/images/ ---進(jìn)入新安裝的虛擬機(jī)的硬盤目錄
2、 在虛擬機(jī)管理界面delete 新安裝的虛擬機(jī)node1,記得不要刪除其硬盤文件,留下其硬盤文件,可以母盤,下面是為了防止以后手殘更改了母盤文件導(dǎo)致其他虛擬機(jī)不能用。
3、 mv node1.qcow2 vm_storage.qcow2 ---更改源硬盤文件名,名字可以自行確定
4、 qemu-img create -f qcow2 -b vm_storage.qcow2 newname.qcow2 ---創(chuàng)建新快照。
5、虛擬機(jī)管理界面添加新機(jī)即可。
選擇第四個,然后改名字即可。
新機(jī)就建立完成。
四 腳本:
1)只添加虛擬機(jī)其余自己操作的腳本:Create_Vm.sh
#!/bin/bash
virt-install \
--name $1 \
--ram 1024 \
--file /var/lib/libvirt/images/$1.wcow2 \
--file-size 8 \
--cdrom /home/kiosk/Desktop/rhel-server-7.2-x86_64-dvd.iso \
--vcpus 1
這個腳本上邊已經(jīng)有詳細(xì)過程。
2)添加帶磁盤的虛擬機(jī)腳本:創(chuàng)建快照,添加快照,安裝 Createvm.sh
#!/bin/bash
qemu-img create -f qcow2 -b /var/lib/libvirt/images/vm_storage.qcow2 \
/var/lib/libvirt/images/$1.qcow2 /dev/null
virt-install \
--name $1 \
--ram 1024 \
--file /var/lib/libvirt/images/$1.qcow2,bus=virtio \
--file-size 8 \
--network source=br0,model=virtio \
--import /dev/null
3)重置虛擬機(jī)腳本:Resetvm.sh
#!/bin/bash
virsh destory $1 /dev/null
rm -rf /var/lib/libvirt/images/$1.qcow2
qemu-img create -f qcow2 -b /var/lib/libvirt/images/vm_storage.qcow2 \
/var/lib/libvirt/images/$1.qcow2 /dev/null
echo Successfully!!!
virsh start $1 /dev/null
virt-viewer $1 /dev/null
sh -x 命令 ---一步一步安裝,若出錯,報告出錯過程