linux下shell脚本论文,Linux下Shell脚本编程
1、 shell腳本是什么
它是一種腳本語言,并非編程語言。
可以使用一些邏輯判斷、循環(huán)等語法。
可以自定義子函數(shù),是系統(tǒng)命令的集合。
shell腳本可以實(shí)現(xiàn)自動化運(yùn)維,大大增加我們的工作效率。
2、shell腳本結(jié)構(gòu)以及執(zhí)行方法
開頭行指定bash路徑: #! /bin/bash
以#開頭的行作為解釋說明
#注釋自己的腳本內(nèi)容,方便自己查閱;utf8字符集,支持中文;
腳本的名字以.sh結(jié)尾,用于區(qū)分這是一個shell腳本
執(zhí)行腳本方式有兩種:
chmod a+x 1.sh? ? 添加x執(zhí)行權(quán)限;
./1.sh 可以直接執(zhí)行,或者寫絕對路徑/root/shell/1.sh
如果沒有執(zhí)行權(quán)限可以 bash 1.sh? ? 或 sh 1.sh
bash -x 1.sh 可以查看腳本執(zhí)行過程
實(shí)驗(yàn)練習(xí):
1234 [root@localhost shell]# cat 1.sh
#!/bin/bash
#這是我的第一個腳本
echo "hello world"
[root@localhost shell]# ls -l
-rw-r--r-- 1 root root 60 6月? 16 19:28 1.sh
[root@localhost shell]# chmod a+x 1.sh
[root@localhost shell]# ls -l
-rwxr-xr-x 1 root root 60 6月? 16 19:28 1.sh
[root@localhost shell]# ./1.sh
hello world
[root@localhost shell]# /root/shell/1.sh
hello world
[root@localhost shell]# /bin/sh 1.sh
hello world
[root@localhost shell]# bash -x 1.sh
+ echo 'hello world'
hello world
執(zhí)行bash和sh是一樣的,sh是bash的軟連接文件;
[root@localhost ~]# ls -l /bin/bash
-rwxr-xr-x. 1 root root 871700 10月 16 2014 /bin/bash
[root@localhost ~]# ls -l /bin/sh
lrwxrwxrwx. 1 root root 4 3月? 4 00:59 /bin/sh -> bash
3、學(xué)會date命令的用法
date? +%Y-%m-%d? ? date +%y-%m-%d 年月日
date? +%Y-%m-%d = date +%F 年月日
date? +%H:%M:%S = date +%T 時間
date +%s? 時間戳
date -d @1434248742? ? 根據(jù)時間戳算出當(dāng)前時間
date -d "+1day" 一天后? ? date -d "-1day" 一天前
date -d? "-1month" 一月前
date -d? “-1min” 一分鐘前
date +%w? ? date +%W 星期
實(shí)驗(yàn)練習(xí):
[root@localhost shell]# date +%y
15
[root@localhost shell]# date +%Y
2015
[root@localhost shell]# date +%m
06
[root@localhost shell]# date +%d
16
[root@localhost shell]# date +%H
14
[root@localhost shell]# date +%M
01
[root@localhost shell]# date +%S
54
從1970年 01月01日0點(diǎn)0分開始算起到現(xiàn)在多少秒;
[root@localhost shell]# date +%s
1434434874
[root@localhost shell]# date -d @1434434874
2015年 06月 16日 星期二 14:07:54 CST
CST是中國時間 +8小時
[root@yonglinux shell]# date -d @0
1970年 01月 01日 星期四 08:00:00 CST
[root@localhost shell]# date +%F
2015-06-16
[root@localhost shell]# date +%T
14:04:17
[root@localhost shell]# date +%Y-%m-%d
2015-06-16
[root@localhost shell]# date +"%Y-%m-%d %H:%M:%S"
2015-06-16 14:05:13
[root@localhost shell]# date +"%F %T"
2015-06-16 14:05:38
周二
12 [root@localhost shell]# date +%w
2
今年的第多少周,24周
[root@localhost shell]# date +%W
24
全年有多少周,52周;
[root@localhost shell]# echo "365/7" | bc
52
[root@localhost shell]# date -d "-1 day"
2015年 06月 15日 星期一 14:16:31 CST
[root@localhost shell]# date -d "-1 day" +"%F %T"
2015-06-15 14:19:13
[root@localhost shell]# date -d "+1 day" +"%F %T"
2015-06-17 14:19:22
[root@localhost shell]# date -d "+1 month" +"%F %T"
2015-07-16 14:19:31
[root@localhost shell]# date -d "+1 year" +"%F %T"
2016-06-16 14:19:39
[root@localhost shell]# date -d "+1 week" +"%F %T"
2015-06-23 14:19:45
[root@localhost shell]# date -d "-10 hour" +"%F %T"
2015-06-16 04:19:59
[root@localhost shell]# date -d "-10 min" +"%F %T"
2015-06-16 14:10:15
[root@localhost shell]# date -d "-10 sec" +"%F %T"
2015-06-16 14:20:14
4、shell腳本中的變量
當(dāng)腳本中使用某個字符串較頻繁并且字符串長度很長時就應(yīng)該使用變量代替。
使用條件語句時,常常使用變量? ? if [ $a -gt 1 ]; then ... ; fi
引用某個命令的結(jié)果時,用變量替代? n=`wc -l 1.txt`
寫和用戶交互的腳本時,變量也是必不可少的? read -p "Input a number: " n; echo $n
如果沒寫這個n,可以直接使用$REPLY
內(nèi)置變量 $0, $1, $2,$#? ? $0表示腳本本身,$1 第一個參數(shù),$2 第二個參數(shù),$#表示參數(shù)的個數(shù);
數(shù)學(xué)運(yùn)算a=1;b=2; c=$(($a+$b))? 或者 c=$[$a+$b]
實(shí)驗(yàn)練習(xí):
引用某個命令的結(jié)果,使用變量代替
[root@localhost shell]# file=`which yum`
[root@localhost shell]# echo $file
/usr/bin/yum
[root@localhost shell]# rpm -qf $file
yum-3.2.29-60.el6.CentOS.noarch
變量只在當(dāng)前shell下生效,子shell不會生效;
要想子shell也生效,使用export file 聲明變量;
用戶交互的變量:
[root@localhost shell]# cat 2.sh
#!/bin/bash
#與用戶交互的變量
read -p "請輸入一個數(shù)字:" num
echo $num
[root@localhost shell]# sh 2.sh
請輸入一個數(shù)字:333
333
參數(shù)的變量:
[root@localhost shell]# cat 3.sh
#!/bin/bash
#關(guān)于參數(shù)的變量
echo "\$1=$1"
echo "\$2=$2"
echo "\$3=$3"
echo "\$#=$#"
echo "\$0=$0"
[root@localhost shell]# sh 3.sh ABC linux world
$1=ABC
$2=linux
$3=world
$#=3
$0=3.sh
數(shù)值變量:
12345678910 [root@localhost shell]# a=1;b=2
[root@localhost shell]# c=$a+$b
[root@localhost shell]# echo $c
1+2
[root@localhost shell]# c=$[$a+$b]
[root@localhost shell]# echo $c
3
[root@localhost shell]# c=$(($a+$b))
[root@localhost shell]# echo $c
3
5、shell中的邏輯判斷
格式1:if 條件 ; then 語句; fi
格式2:if 條件; then 語句; else 語句; fi
格式3:if …; then … ;elif …; then …; else …; fi
邏輯判斷表達(dá)式:if [ $a -gt $b ]; if [ $a -lt 5 ]; if [ $b -eq 10 ]等;注意到處都是空格。
可以使用 &&并且 || 或者 結(jié)合多個條件
大于>gt? ? (greater than)
小于< lt? ? (less than)
大于等于 >= ge
小于等于 <=? le
等于? ? ==eq? ? (equal)
不等于? != ne
實(shí)驗(yàn)練習(xí):
[root@localhost shell]# cat if.sh
#!/bin/bash
#if判斷語句,條件為真,打印true;
if :
then
echo true
fi
[root@localhost shell]# sh if.sh
true
if判斷語句2;
[root@localhost shell]# cat if2.sh
#!/bin/bash
#if判斷語句,條件為真,返回true;
if [ 1 == 1 ]
then
echo "true"
fi
[root@localhost shell]# sh -x if2.sh
+ '[' 1 == 1 ']'
+ echo true
true
[root@localhost shell]# sh if2.sh
true
if判斷語句3;
[root@localhost shell]# cat if3.sh
#!/bin/bash
#if判斷語句,條件為真返回true,條件為假,返回false;
if [ "1" == "2" ]
then
echo "true"
else
echo "false"
fi
[root@localhost shell]# sh if3.sh
false
變量,進(jìn)行比較
[root@localhost shell]# cat if4.sh
#!/bin/bash
#if判斷語句,變量進(jìn)行比較;
a=1
if [ "$a" == "2" ]
then
echo "true"
else
echo "false"
fi
[root@localhost shell]# sh -x if4.sh
+ a=1
+ '[' 1 == 2 ']'
+ echo false
false
多個判斷要加elif
[root@localhost shell]# cat if5.sh
#!/bin/bash
#if判斷語句,多個判斷使用elif;
a=1
if [ "$a" == "2" ]
then
echo "true"
elif [ "$a" -lt 10 ]
then
echo "no false"
else
echo "false"
fi
[root@localhost shell]# sh if5.sh
no false
[ $a -lt 3 ] 也可以這樣代替 (($a<3));使用方括號請一定注意空格;
1234 [root@localhost shell]# a=1;if(($a<3)); then echo OK;fi
OK
[root@localhost shell]# a=1;if [ $a -lt 3 ]; then echo OK;fi
OK
&& 并且? 前面的執(zhí)行成功后才執(zhí)行后面的;
|| 或者? 前面的執(zhí)行不成功執(zhí)行后面的;
12345 [root@localhost shell]# a=5
[root@localhost shell]# if [ $a -lt 10 ]&&[ $a -gt 2 ];then echo OK;fi
OK
[root@localhost shell]# if [ $a -lt 10 ]||[ $a -gt 2 ];then echo OK;fi
OK
奇數(shù)偶數(shù)判斷,輸入的數(shù)字除以2,余數(shù)為0為偶數(shù),非0為奇數(shù);
[root@yonglinux shell]# cat 4.sh
#!/bin/bash
read -p "enter a number:" n
n1=$[$n%2]
if [ $n1 -eq 0 ]
then
echo "你輸入的數(shù)字是偶數(shù)"
else
echo "你輸入的數(shù)字是奇數(shù)"
fi
[root@yonglinux shell]# sh 4.sh
enter a number:23
你輸入的數(shù)字是奇數(shù)
[root@yonglinux shell]# sh 4.sh
enter a number:90
你輸入的數(shù)字是偶數(shù)
判斷輸入的是否是數(shù)字,不是數(shù)字的直接退出;數(shù)字的話判斷奇數(shù)或偶數(shù);
`echo $n|grep -c '[^0-9]'`? ? 匹配輸入的字符為非數(shù)字的行數(shù),如果為1說明不是數(shù)字。
[root@localhost shell]# cat 5.sh
#!/bin/bash
#判斷輸入的是否是數(shù)字,不是數(shù)字的直接退出;數(shù)字的話判斷是奇數(shù)或偶數(shù);
read -p "請輸入一個數(shù)字:" n
n2=`echo $n|grep -c '[^0-9]'`
if [ $n2 -eq 1 ]
then
echo "你輸入的不是純數(shù)字,請重新輸入"
exit 1
fi
n1=$[$n%2]
if [ $n1 -eq 0 ]
then
echo "你輸入的數(shù)字是偶數(shù)"
else
echo "你輸入的數(shù)字是奇數(shù)"
fi
[root@localhost shell]# sh 5.sh
請輸入一個數(shù)字:abc
你輸入的不是純數(shù)字,請重新輸入
[root@localhost shell]# sh 5.sh
請輸入一個數(shù)字:323
你輸入的數(shù)字是奇數(shù)
6、if 判斷文件、目錄屬性
[ -f file ]判斷是否是普通文件,且存在
[ -d file ] 判斷是否是目錄,且存在
[ -e file ] 判斷文件或目錄是否存在
[ -r file ] 判斷文件是否可讀
[ -w file ] 判斷文件是否可寫
[ -x file ] 判斷文件是否可執(zhí)行
實(shí)驗(yàn)練習(xí):
1.sh存在的話執(zhí)行后面的
[root@localhost shell]# [ -f 1.sh ] && echo "1.sh exist"
1.sh exist
21.sh不存在執(zhí)行后面的。
12 [root@localhost shell]# [ -f 21.sh ] || echo "1.sh not exist"
1.sh not exist
判斷文件是否存在
[root@localhost shell]# cat test.sh
#!/bin/bash
#判斷1.sh是否存在;
if [ -e 1.sh ]
then
echo "1.sh exist"
else
echo "1.sh not exist"
fi
[root@localhost shell]# sh test.sh
1.sh exist
exec的用法,結(jié)合date變量實(shí)驗(yàn)
exec命令用于調(diào)用并執(zhí)行指令的命令。exec命令通常用在shell腳本程序中,可以調(diào)用其他的命令。如果在當(dāng)前終端中使用命令,則當(dāng)指定的命令執(zhí)行完畢后會立即退出終端。
[root@localhost shell]# cat date.sh
#!/bin/bash
#exec的用法,結(jié)合date變量實(shí)驗(yàn);
d=`date +%F`
exec >/tmp/$d.log 2>&1
echo "Begin at `date`"
ls /tmp/abc
cd /ddd
echo "End at `date`"
[root@localhost shell]# sh date.sh
[root@localhost shell]# cat /tmp/2015-06-16.log
Begin at 2015年 06月 16日 星期二 16:49:54 CST
ls: 無法訪問/tmp/abc: 沒有那個文件或目錄
date.sh: line 7: cd: /ddd: 沒有那個文件或目錄
End at 2015年 06月 16日 星期二 16:49:54 CST
exec >/tmp/$d.log 2>&1? 表示執(zhí)行下面的行,輸出正確或錯誤的信息都寫到/tmp/目錄下 日期.log里面;
總結(jié)
以上是生活随笔為你收集整理的linux下shell脚本论文,Linux下Shell脚本编程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 徽商银行信用卡额度一般多少?主要取决于三
- 下一篇: 2018最新徽商银行信用卡年费收费标准和