Shell编程入门(第二版)(上)
簡單的示例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/sysinfoecho "Disk info:" >> /tmp/sysinfo /bin/df -h >> /tmp/sysinfo echo >> /tmp/sysinfoecho "Online users:" >> /tmp/sysinfo /usr/bin/who | /bin/grep -v root >> /tmp/sysinfo echo >> /tmp/sysinfoecho "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.shShell結構
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 dateDATE=$(/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.tarif [ $? -eq 0 ] thenecho "$1 $DATE backup successfully" >> /backup/$1.bak.log elseecho "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 varecho '$# is' $# echo '$* is' $* echo '$0 is' $0 echo '$? is' $? echo '$$ is' $$ echo '$2 is' $2Shell命令
1、read命令[交互方式]
read?USERNAME
示例-read.sh
#!/bin/bash # A test script for readread first second thirdecho "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 expra=10 b=20 c=30val1=$(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總結
以上是生活随笔為你收集整理的Shell编程入门(第二版)(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: logback 常用配置详解(二) ap
- 下一篇: 用ASP.NET 重绘TabContro