shell-----構建基本指令碼

秦廣王發表於2019-05-17

使用多個命令

如果想要多個命令同時執行,可以把它們放在一行,用分號隔開。

date;who

建立shell指令碼檔案

建立shell指令碼時,必須在檔案第一行指定要使用的shell

#!/bin/bash

顯示訊息

echo命令可以用單引號或雙引號來劃定文字字串。

[root@node1 ljy]# more ceshi.sh 
#!/bin/bash
echo "the time are:"
date
echo "ceshi_1"
echo ceshi_2
[root@node1 ljy]# sh ceshi.sh 
the time are:
2019年 05月 16日 星期四 19:07:35 CST
ceshi_1
ceshi_2

如果想把文字字串與時間輸出在同一行,可以加-n引數。

[root@node1 ljy]# more ceshi.sh 
#!/bin/bash
echo -n "the time are:"
date
[root@node1 ljy]# sh ceshi.sh 
the time are:2019年 05月 16日 星期四 19:08:50 CST

使用變數

1、環境變數

可以用set命令來顯示一份完整的當前環境變數列表。

在指令碼中,可以在環境變數的名稱前加上美元符($)來使用這些環境變數。

如果要顯示美元符,在美元符前面加一個反斜線\。

2、使用者變數

使用者變數區分大小寫,使用等號將值賦給變數,在變數、等號、值之間不能出現空格。

有兩種方式可以將命令輸出賦給變數:

a,反引號字元(`)

b,$()格式

[root@node1 ~]# test=`date`
[root@node1 ~]# echo $test 
2019年 05月 17日 星期五 09:22:03 CST
[root@node1 ~]# test2=$(date)
[root@node1 ~]# echo $test2  
2019年 05月 17日 星期五 09:22:19 CST

舉例

[root@node1 ljy]# more ceshi.sh 
#!/bin/bash
today=$(date +%y%m%d)
ls -al > log.$today
[root@node1 ljy]# sh ceshi.sh 
[root@node1 ljy]# ll
總用量 8
-rw-r--r-- 1 root root  54 5月  17 09:25 ceshi.sh
-rw-r--r-- 1 root root 213 5月  17 09:25 log.190517

today變數是被賦予格式化後的date命令的輸出,+%y%m%d格式告訴date命令將日期顯示為兩位數的年月日組合。

管道

管道(|)被放在命令之間,將一個命令的輸出重定向到另一個命令中,即第一個命令產生的結果的同時,傳遞給下一個命令。

[root@node1 ljy]# rpm -qa | sort >rpm.list
[root@node1 ljy]# more rpm.list 
acl-2.2.51-14.el7.x86_64
aic94xx-firmware-30-6.el7.noarch
alsa-firmware-1.0.28-2.el7.noarch
alsa-lib-1.1.4.1-2.el7.x86_64
alsa-tools-firmware-1.1.0-1.el7.x86_64
basesystem-10.0-7.el7.centos.noarch
bash-4.2.46-30.el7.x86_64

退出指令碼

shell中執行的每個命令都使用退出狀態碼告訴shell已經執行完畢。

Linux提供了一個專門的變數$?來儲存上個已執行命令的退出狀態碼

 

exit命令允許你在指令碼結束時指定一個狀態碼

[root@node1 ljy]# more ceshi.sh 
#!/bin/bash
date
[root@node1 ljy]# sh ceshi.sh 
2019年 05月 17日 星期五 09:42:18 CST
[root@node1 ljy]# echo $?
0
[root@node1 ljy]# more ceshi.sh 
#!/bin/bash
date
exit 5
[root@node1 ljy]# sh ceshi.sh   
2019年 05月 17日 星期五 09:42:43 CST
[root@node1 ljy]# echo $?       
5

 

相關文章