Shell編程入門(第二版)(上)
來源:程序員人生 發(fā)布時間:2014-10-10 08:00:01 閱讀次數(shù):2114次
簡單的示例Shell程序
示例1.
#!/bin/bash
#This is to show what a shell script looks like
echo "Our first example"
echo # This inserts an empty line in output.
echo "We are currently in the following directory."
/bin/pwd
echo
echo "This directory contains the following files"
/bin/ls -l .
示例2.
#!/bin/bash
# Auto mail for system info
/bin/date +%F >> /tmp/sysinfo
echo >> /tmp/sysinfo
echo "Disk info:" >> /tmp/sysinfo
/bin/df -h >> /tmp/sysinfo
echo >> /tmp/sysinfo
echo "Online users:" >> /tmp/sysinfo
/usr/bin/who | /bin/grep -v root >> /tmp/sysinfo
echo >> /tmp/sysinfo
echo "Memory info:" >> /tmp/sysinfo
/usr/bin/free -m >> /tmp/sysinfo
echo >> /tmp/sysinfo
# Write to root
/usr/bin/write root < /tmp/sysinfo && /bin/rm -f /tmp/sysinfo
# crontab -e
# 0 9 * * 1-5 ./sysinfo.sh

Shell結(jié)構(gòu)
1、#!指定執(zhí)行腳本的Shell
2、#注釋行,描述該腳本的作用,負(fù)責(zé)人等信息
3、命令和控制結(jié)構(gòu)
創(chuàng)建shell程序的步驟
第一步:創(chuàng)建一個包含命令和控制結(jié)構(gòu)的文件。
第二步:修改這個文件的權(quán)限使它可以執(zhí)行: chmod u+x
第三步:執(zhí)行 ./example 或 sh example 或 . sysinfo.sh
Shell變量
變量:是shell傳遞數(shù)據(jù)的一種方法,用來代表每個取值的符號名。
Shell有兩類變量:臨時變量和永久變量。
臨時變量是shell程序內(nèi)部定義的,其使用范圍僅限于定義它的程序,對其它程序不可見。包括:用戶自定義變量、位置變量。
永久變量是環(huán)境變量,其值不隨shell腳本的執(zhí)行結(jié)束而消失。
1、用戶自定義變量
用戶定義的變量由字母或下劃線開頭,由字母、數(shù)字或下劃線序列組成,區(qū)分大小寫。變量名長度沒有限制。在使用變量值時,要在變量名前加上前綴“$”。
2、設(shè)置和使用變量
設(shè)置變量:習(xí)慣上用大寫字母來命名變量。變量名只能以字母表中的字符開頭,不能用數(shù)字。
變量賦值:“=”兩邊沒有空格。
定義時賦值,如NUM=1
將一個命令的執(zhí)行結(jié)果賦給變量,如:TIME=`date`;TIME=$(date +%F)
將一個變量的值賦給另一個變量,如:B=120 ; A =$B
使用echo命令查看變量值。例如:echo $A

3、包含多個字的變量:
NAME=Mike Ron #運行時出錯,應(yīng)改為:
NAME=“Mike Ron” 或 $NAME=‘Mike Ron’
4、單引號與雙引號的區(qū)別
比如:定義DATE=$(date +%F)
time=”time is $DATE”
echo $time
time='time is $DATE'
echo $time

單引號之間的內(nèi)容原封不動地指定給了變量。
5、 set查看系統(tǒng)中定義的所有變量
unset刪除所定義的變量
6、位置變量
Shell解釋執(zhí)行用戶命令時,將命令行的第一個部分作為命令名,其它部分作為參數(shù)。由出現(xiàn)在命令行上的位置確定的參數(shù)稱為位置參數(shù)。
例如:
ls -l file1 file2 file3
$0 這個程序的文件名 ls -l
$n 這個程序的第n個參數(shù)值,n=1~9
7、特殊變量
$* 這個程序的所有參數(shù)
$# 這個程序的參數(shù)個數(shù)
$$ 這個程序的PID
$! 執(zhí)行上一個后臺命令的PID
$? 執(zhí)行上一個命令的返回值

示例-autobak.sh
#!/bin/bash
# backup files by date
DATE=$(/bin/date +%Y%m%d)
/bin/tar -cf /backup/$1.$DATE.tar $1 > /dev/null 2>> /backup/$1.bak.log
/bin/gzip /backup/$1.$DATE.tar
if [ $? -eq 0 ]
then
echo "$1 $DATE backup successfully" >> /backup/$1.bak.log
else
echo "ERROR: failure $1 $DATE backup" >> /bakup/$1.bak.log
fi
# crontable -e
# 0 3 * * 2,5 script
示例-special.sh
#!/bin/bash
# A test script for special var
echo '$# is' $#
echo '$* is' $*
echo '$0 is' $0
echo '$? is' $?
echo '$$ is' $$
echo '$2 is' $2
Shell命令
1、read命令[交互方式]
read USERNAME
示例-read.sh
#!/bin/bash
# A test script for read
read first second third
echo "Your first parameter is $first"
echo "Your second parameter is $second"
echo "Your third parameter is $third"
#sh -x 命令:單步調(diào)試顯示執(zhí)行
2、expr命令,對整型變量進(jìn)行運算
如: expr 3 + 5 #”+”號之間須有空格
expr $var1 - 5
expr $var1 / $var2
expr $var3 * 10 #”*”號需要轉(zhuǎn)義符””

復(fù)雜的運算:
expr `expr 5 + 7`/$var4

將運算結(jié)果賦予變量:
var4=` expr $var1 / $var2 `
示例-expr.sh
#!/bin/bash
# A test for expr
a=10
b=20
c=30
val1=$(expr $a + $b + $c)
echo "The value of val1 is $val1"
val2=$(expr $c / $b)
echo "The value of val2 is $val2"
val3=`expr $a * $b`
echo "The value of val3 is $val3"
val4=`expr $a + $c / $b`
echo 'The value of $a + $c / $b is ' $val4
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈