shell简单脚本

Shell小脚本

 

 

一.       一. 简介

从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作。在Linux GUI日益完善的今天,在系统管理等领域,Shell编程仍然起着不可忽视的作用。深入地了解和熟练地掌握Shell编程,是每一个Linux用户的必修 功课之一。

LinuxShell种类众多,常见的有: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 ShellBourne 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

系统基本信息

namelocalhost.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

(0)
TouchTouch
上一篇 2017-08-05
下一篇 2017-08-06

相关推荐

  • tomcat之-从AT到Cluster

    本文导航 一、    LAMT搭建以及部署应用        1、LAMT部署                   (1)、安装Apache     …

    2017-02-13
  • iptables基础概念

    iptables基本概念梳理 前言 netfilter/Iptables (其中包括netfilter和Iptables两个组件)组 成了Linux平台下的包过滤防火墙,它与大多数的Linux自带软 件一样,这个防火墙是免费提供的,它可以代替昂贵的企业级 防火墙来解决实际问题与实际方案,完成封包过滤,封包重定 向和网络地址转换等功能。 一、工作原理 数据包从…

    Linux干货 2016-12-19
  • 第一周

       注意:请同学们不要参考我这个,怕误导,谢谢 A.计算机组成及其功能     1.计算机的组成分:硬件和软件         硬件:CPU,存储设备(内存,硬盘),输入输出设备(键盘,显示器,鼠标)  &n…

    Linux干货 2016-12-31
  • 沉舟侧畔千帆进,枯木头前万树春

    N21第五周博客作业 1、  显示/boot/grub/grub.conf中以至少一个空白字符开头的行; ~]#  grep -E "^[[:space:]]+" //boot/grub/grub.conf root (hd0,0) kernel /vmlin…

    Linux干货 2016-07-29
  • find用法及德·摩根定律

    德·摩根定律   奥古斯都·德·摩根首先发现了在逻辑命题中存在着下面这些关系:      非(P且Q)=非P或非Q      非(P或Q)=非P且非Q 上述逻辑命题可以解释为:    not ( P and Q)=not P or not Q    …

    Linux干货 2016-08-18
  • N25-第六周

    请详细总结vim编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#;      cp /etc/rc.d/rc.sysinit /tmp     &nbsp…

    Linux干货 2017-03-08