Shell編程入門(第二版)(上)
來源:程序員人生 發布時間:2014-10-10 08:00:01 閱讀次數:2113次
簡單的示例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結構
1、#!指定執行腳本的Shell
2、#注釋行,描述該腳本的作用,負責人等信息
3、命令和控制結構
創建shell程序的步驟
第一步:創建一個包含命令和控制結構的文件。
第二步:修改這個文件的權限使它可以執行: chmod u+x
第三步:執行 ./example 或 sh example 或 . sysinfo.sh
Shell變量
變量:是shell傳遞數據的一種方法,用來代表每個取值的符號名。
Shell有兩類變量:臨時變量和永久變量。
臨時變量是shell程序內部定義的,其使用范圍僅限于定義它的程序,對其它程序不可見。包括:用戶自定義變量、位置變量。
永久變量是環境變量,其值不隨shell腳本的執行結束而消失。
1、用戶自定義變量
用戶定義的變量由字母或下劃線開頭,由字母、數字或下劃線序列組成,區分大小寫。變量名長度沒有限制。在使用變量值時,要在變量名前加上前綴“$”。
2、設置和使用變量
設置變量:習慣上用大寫字母來命名變量。變量名只能以字母表中的字符開頭,不能用數字。
變量賦值:“=”兩邊沒有空格。
定義時賦值,如NUM=1
將一個命令的執行結果賦給變量,如:TIME=`date`;TIME=$(date +%F)
將一個變量的值賦給另一個變量,如:B=120 ; A =$B
使用echo命令查看變量值。例如:echo $A

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

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

示例-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 命令:單步調試顯示執行
2、expr命令,對整型變量進行運算
如: expr 3 + 5 #”+”號之間須有空格
expr $var1 - 5
expr $var1 / $var2
expr $var3 * 10 #”*”號需要轉義符””

復雜的運算:
expr `expr 5 + 7`/$var4

將運算結果賦予變量:
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
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈