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 23:23
下一篇 2017-08-06 11:05

相关推荐

  • 马哥教育网络班21期+第9周课程练习

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; [root@localhost test]# ./exercise3.sh  be eable to login us…

    Linux干货 2016-08-05
  • 初识SElinux

    一、SElinux(Secure Enhanced Linux):安全增强的Linux        SElinux是一个在内核中实践的强制访问控制(MAC)安全性机制,由美国国家安全局NSA(The National Security Agency)和SCC(Secure Computing Co…

    Linux干货 2016-09-15
  • bash特性

    2018-03-11

    2018-03-11
  • linux发展史

    Linux 发展史 说明 此前对linux认识模糊一知半解,近期通过学习将自己对于linux的发展总结一下方便大家日后的学习。那Linux是目前一款非常火热的开源操作系统,可是linux是什么时候出现的,又是因为什么样的原因被开发出来的呢。以下将对linux的发展历程进行详细的讲解。    目录 一、Linux发展背景 二、UINIX的诞…

    Linux干货 2016-10-14
  • dstat,htop,top,ps命令 (Blog 8)

      Linux哲学思想之一:一切皆文件:内核将其参数全部映射为文件;这些文件保存在/proc, /sys目录中;/proc目录:保存内核及进程状态信息,是内核参数的映射; 内核参数:可调参数:调整运行特性;/proc/sys不可调参数:输出内核统计信息及状态信息; 进程状态:/proc/# 与进程号同名的目录,目录下存放许多当前进程相关信息; 进程…

    Linux干货 2017-11-27
  • Linux的终端类型

    Linux的终端类型 Linux的终端类型: TTY(虚拟终端,图形终端) 早期的电子计算机的输入设备是穿孔卡片【又称霍列瑞斯式卡(Herman Hollerith)或IBM卡】,用有洞和无洞表示计算机二进制里面的0和1,以此来记录相关信息,但是这种方式很慢。 1986年股票代码被发明,人们通过电报和电传打印机发送实时股票价格,此时teletypewrite…

    Linux干货 2016-10-14