一、shell腳本介紹 (一)腳本案例及介紹: (二)shell腳本解釋器: 解釋器預設為bash,如果腳本中不標明解釋器,預設調用bash。 批量註釋方法1:ctrl+shift+v,游標向下移動,shitf+a,第一行前 ,esc。 批量註釋方法2:將要註釋的內容寫在下麵符號內::/dev/nu ...
一、shell腳本介紹
(一)腳本案例及介紹:
#!/bin/bash
LOG_DIR=/var/log
ROOT_UID=0
if ["$UID -ne "$ROOT_UID"]
then
echo "must be root run this script."
exit 1
fi
cd $ LOG_DIR || {
echo "cannot change to necessary directory"
exit 1
}
cat /dev/null>message && {
echo "logs cleaned up."
exit 0
}
echo "logs cleaned fail."
exit 1
(二)shell腳本解釋器:
[root@web01 ~]# echo $SHELL
/bin/bash
[root@web01 ~]# ll /bin/sh
lrwxrwxrwx. 1 root root 4 Oct 10 2018 /bin/sh -> bash
解釋器預設為bash,如果腳本中不標明解釋器,預設調用bash。
批量註釋方法1:ctrl+shift+v,游標向下移動,shitf+a,第一行前#,esc。
批量註釋方法2:將要註釋的內容寫在下麵符號內::<<EOF XXX EOF.冒號表示什麼的都不做。
批量註釋方法3:cat >/dev/null<<EOF XXX EOF
(三)shell執行方法:
方法1:bash,sh
方法2:/path/script-name 或者./script-name
方法3:source script-name 或者.script-name
方法4:sh<script-name 或者 cat scripts-name | sh
實例:
[root@web01 scripts01]# bash test.sh
i am oldboy teacher.
[root@web01 scripts01]# sh test.sh
i am oldboy teacher.
[root@web01 scripts01]# ./test.sh
-bash: ./test.sh: Permission denied
[root@web01 scripts01]# /server/scripts01/test.sh
-bash: /server/scripts01/test.sh: Permission denied
[root@web01 scripts01]# ls -l test.sh
-rw-r--r-- 1 root root 127 Jan 18 23:12 test.sh
[root@web01 scripts01]# chmod +x test.sh
[root@web01 scripts01]# /server/scripts01/test.sh
i am oldboy teacher.
[root@web01 scripts01]# sh < test.sh
i am oldboy teacher.
[root@web01 scripts01]# cat test.sh | sh
i am oldboy teacher.
[root@web01 scripts01]#
實例:
[root@web01 scripts01]# chkconfig --list | grep 3:on | awk '{print "chkconfig", $1,"off"}'
chkconfig crond off
chkconfig network off
chkconfig rsyslog off
chkconfig sshd off
[root@web01 scripts01]# chkconfig --list | grep 3:on | awk '{print "chkconfig", $1,"off"}' | bash
[root@web01 scripts01]# chkconfig --list | grep 3:on
方法3:source script-name 或者.script-name
[root@web01 scripts01]# cat test1.sh
user=`whoami`
[root@web01 scripts01]# sh test1.sh
[root@web01 scripts01]# echo $user
[root@web01 scripts01]#
# sh 相當於在當前shell下新開啟一個子shell,所以echo $user,在當前開啟shell下執行。
[root@web01 scripts01]# source test1.sh
[root@web01 scripts01]# echo $user
root
[root@web01 scripts01]#
#source 相當於在當前shell下執行。
父shell
子shell
使用source 和.來執行腳本,相當於在一個shell執行腳本,可以相互調用。
使用bash或者sh執行腳本,開啟一個新的shell,或者開啟子shell。
[root@web01 scripts01]# vim 1.sh
sh test1.sh
echo $user
[root@web01 scripts01]# sh 1.sh
[root@web01 scripts01]# cat 1.sh
sh test1.sh
echo $user
[root@web01 scripts01]# cat 1.sh
. ./test1.sh
echo $user
[root@web01 scripts01]# sh 1.sh
root
使用source 和.可以相互調用父shell和子shell。
(四)shell執行過程:
父shell腳本-外部命令-子腳本-父shell
父shell和子shell之間不能相互調用:如果希望相互調用,使用source和點.來執行。
shell腳本編程規範和習慣:
①開頭加解釋器:#!/bin/bash
②附帶作者及版權信息:oldboy at dddd
③腳本擴展名:.sh
④腳本存放固定位置:/server/scripts
⑤腳本中不使用中文。
⑥成對的符號一次書寫完成。中括弧,兩邊需空格
⑦迴圈格式一次性輸入完成。