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
“内存大小:“”$Ferr
GB”
echo
“硬盘大小:“”$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
内存大小:1 GB
硬盘大小: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.178linux.com/84003