Shell小腳本
一. 一. 簡介
從程序員的角度來看, Shell本身是一種用C語言編寫的程序,從用戶的角度來看,Shell是用戶與Linux操作系統溝通的橋梁。用戶既可以輸入命令執行,又可以利用 Shell腳本編程,完成更加復雜的操作。在Linux GUI日益完善的今天,在系統管理等領域,Shell編程仍然起著不可忽視的作用。深入地了解和熟練地掌握Shell編程,是每一個Linux用戶的必修 功課之一。
Linux的Shell種類眾多,常見的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、Shell for Root(/sbin/sh),等等。不同的Shell語言的語法有所不同,所以不能交換使用。每種Shell都有其特色之處,基本上,掌握其中任何一種 就足夠了。在本文中,我們關注的重點是Bash,也就是Bourne Again Shell,由于易用和免費,Bash在日常工作中被廣泛使用;同時,Bash也是大多數Linux系統默認的Shell。在一般情況下,人們并不區分 Bourne Shell和Bourne Again Shell,所以,在下面的文字中,我們可以看到#!/bin/sh,它同樣也可以改為#!/bin/bash。
利用vi等文本編輯器編寫Shell腳本的格式是固定的,如下:
#!/bin/sh
#comments
Your commands go here
首行中的符號#!告訴系統其后路徑所指定的程序即是解釋此腳本文件的Shell程 序。如果首行沒有這句話,在執行腳本文件的時候,將會出現錯誤。后續的部分就是主程序,Shell腳本像高級語言一樣,也有變量賦值,也有控制語句。除第 一行外,以#開頭的行就是注釋行,直到此行的結束。如果一行未完成,可以在行尾加上“,這個符號表明下一行與此行會合并為同一行。
編輯完畢,將腳本存盤為filename.sh,文件名后綴sh表明這是一個Bash腳本文件。執行腳本的時候,要先將腳本文件的屬性改為可執行的:
chmod +x filename.sh
執行腳本的方法是:
./filename.sh
####################################
下面我們從經典的“hello world”入手,看一看最簡單的Shell腳本的模樣。
#!/bin/sh
#print hello world in the console
window
a = “hello world”
echo $a
二.Shell中的變量
變量:命名的內存空間
數據存儲方式:
字符:
數值:整型,浮點型
? 變量:變量類型
作用:
1 、數據存儲格式
2 、參與的運算
3 、表示的數據范圍
類型:
字符
數值:整型、浮點型
強類型 :變量 不經過強制轉換,它永遠是這個數據類型,不
允許隱式的類型 轉換。一般定義變量時必須指定類型、參與
運算必須符合類型要求;調用未聲明變量會產生錯誤
如 java,c#
? 弱類型:語言的運行時會隱式做數據類型 轉換。無須指定類
型,默認均為字符型;參與運算會自動進行隱式類型轉換;
變量無須事先定義可直接調用
如:bash 不支持浮點數,php
? 變量命名法則:
1 、不能使程序中的保留字:例如if, for
2 、只能使用數字、字母及下劃線,且不能以數字開頭
3 、見名知 義
4 、統一命名
三.Shell腳本的基本練習
1、編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小。
#!bin/bash?
ipv4=`ifconfig
ens33 |grep “\<inet\>”|tr -s ‘ ‘|cut -d ‘ ‘ -f3`
banben=`cat
/etc/redhat-release;uname -r`
CPU=`lscpu|grep
“Model name”|cut -d : -f 2|tr -s ‘ ‘`
Ferr=$[$(cat
/proc/meminfo |head -1|grep -o “[[:digit:]]\+”)/1024/1024]
Fdisk=`fdisk
-l|head -n 2|tail -n 1|cut -d ‘ ‘ -f3,4`
echo
“系統基本信息“
echo
“name:“$(hostname)
echo
“IPV4地址:“”$ipv4”
echo
“版本信息和內核:“$banben
echo
“CPU型號:“”$CPU”
echo
“內存大?。?/span>“”$Ferr
GB”
echo
“硬盤大?。?/span>“”$Fdisk”
輸出結果
[root@localhost app]# bash sys
系統基本信息
name:localhost.localdomain
IPV4地址:172.17.252.64
版本信息和內核:CentOS
Linux release 7.3.1611 (Core) 3.10.0-514.el7.x86_64
CPU型號: Intel(R) Core(TM) i5-3320M CPU @ 2.60GHz
內存大?。?span>1 GB
硬盤大?。?span>214.7
GB,
2、編寫腳本/root/bin/backup.sh,可實現將/etc/目錄備份到/root/etcYYYY-mm-dd中
#!/bin/bash
Echo “start backup ”
Sleep 3
cp -a /etc /root/etc$(date +%F)
echo “work is over”
輸出結果
[root@localhost app]# bash backup.sh
“start backup
”
“work is
over”
[root@localhost app]# ^C
3、編寫腳本/root/bin/disk.sh,顯示當前硬盤分區中空間利用率最大的值
[root@localhost app]# vim disk.sh
#!/bin/bash
輸出結果
echo “硬盤利用率最大的值:$(df |grep -o “\<[[:digit:]]\{1,3\}%” |sort -n |tail -n
1)”
[root@localhost app]# bash disk.sh
硬盤利用率最大的值:31%
4、編寫腳本/root/bin/links.sh,顯示正連接本主機的每個遠程主機的IPv4地址和連接數,并按連接數從大到小排序
#!/bin/bash
netstat -tun | grep “[0-9]” | tr -s ‘ ‘ : |cut -d:
-f6|sort|uniq -c|sort –rn
輸出結果
[root@localhost app]# bash links.sh
3 172.17.250.182
[root@localhost app]#
原創文章,作者:Touch,如若轉載,請注明出處:http://www.www58058.com/84003