第一次写的linux脚本

刚开始学的时候,都是一些基本的命令,总是无法把它们联系到一块去,现在刚开始接触脚本,顿时感觉压力好大,基础命令如果记不牢,很有可能就挂了,下面我把近几天学习的一些脚本命令及练习拿来分享一下,供大家参考,同时加深我的记忆。

首先是写脚本的格式,我这里用vim编辑器来写的脚本,因为它的色彩非常明艳,易于区分。基本格式如下:

#!/bin/bash 第一行一般为调用使用的语言,或者你使用的 shell

# —————————————- 下面就是注释啦,,这个也很重要,都是要在脚本中写的,便于以后查阅,有的不需要的可以选择不写

# Filename: hello.sh 程序名

# Revision: 1.1 版本号

# Date: 2017/06/01 更改日期

# Author: wang 作者

# Email: wang@gmail.com 邮箱

# Website: www.magedu.com 网站,可以查阅相关信息

# Description: This is the first script 描述该程序的作用,及注意事项

# Copyright: 2017 wang 版权

# License: GPL 许可证

echo “hello world” 脚本内容

写完上面基本的注释之后就可以安心写自己的脚本内容了,脚本一般都是为实现某个特定的功能,简化某些复杂的操作,这里就得引用一些变量来为我们简化程序了。变量有些是系统中自带的,还有些需要我们自己定义,一般定义变量是以字母、下划线和数字定义的,但是不能以数字开头,下面说一些常用的变量吧,当然变量也分好多种,有本地变量,环境变量,位置变量等,我每一种都会列举一些,以便用的时候查阅。

本地变量:如A=123其中A就是本地变量,只能在当前shell 使用

环境变量:

PATH 显示路径,显示可执行文件的搜索路径

SHELL 显示当前的shell

 第一次写的linux脚本

USER 显示当前用户

UID 显示当前用户的uid

HOME 显示用户的家目录

PWD 显示用户当前处在哪个目录下

SHLVL 显示用户当前出于几级shell

LANG 显示字符集

MAIL 显示邮箱路径

HOSTNAME 显示主机名

HISTSIZE 可以设置保存的历史命令条数

— 显示上次执行的命令

位置变量:

$1, $2, …:对应第1、第2等参数, shift [n]换位置

$0: 命令本身

$*: 传递给脚本的所有参数,全部参数合为一个字符串

$@: 传递给脚本的所有参数,每个参数为独立字符串

$#: 传递给脚本的参数的个数

$@ $* 只在被双引号包起来的时候才会有差异

set — 清空所有位置变量

下面正式开始我的脚本之路,这将是一个痛并快乐的过程。

(1)写一个能够创建新脚本的Shell script,如名为createsh当执行时createsh /root/bin/test1.sh

则会自动创建并打开/root/bin/test1.sh,且其中包含以下内容。

答题:脚本内容如下:

第一次写的linux脚本

运行时先给createsh加个执行权限,chmod +x createsh,然后再这样执行

第一次写的linux脚本

其中b.sh是我要创建的新文件名,这个名字可以随意写,执行之后就生成了一个名为b.sh的新文件了,里面还自动有了注释和自动生成时间了。

解题思路:首先使用echo ,用引号引用一段你想要显示的内容导入到$1中,$1就是你执行命令的第一个参数,>是输出重定向,把内容给一个文件之后,在现有基础上可以再编辑文件,最后给创建的新文件加上执行权限,也可以不加,这看个人爱好了。

(2)编写脚本/root/bin/sumid.sh,计算/etc/passwd文件中的第10个用户和第20用户的ID之和

答题:由于上一题我们已经写了一个快速创建脚本的命令,因此这一题我们可以使用那个命令

第一次写的linux脚本

下面这个是用扩展正则表达式,看着好像比我的简单,所以也列出来,以供以后参考。

第一次写的linux脚本

这是我写的第一种方法,是一种非常不灵巧的方法,但是我想着在没有其他办法的情况下,是可以使用这种办法的。还有一种看起来好像比较容易的方法,我在这里也把它写出来。

第一次写的linux脚本

运行时是这样的:

第一次写的linux脚本

解题思路:第一种方法的解题思路非常简单,cat –n /etc/passwd 的意思就是显示passwd 的内容,并显示行号,这样便于后面的截取。第一个管道符后面的内容是截取以空格开头的,后面不止一个空格,中间有数字10和20的行,这样就把第10行和第20行截取下来了。第三个管道符就是截取uid部分了,这就很简单了,关键是最后怎么计算它们的和,利用echo ` `把前面的结果输入到bc中,以此来计算id之和。

第二种方法 就是单独把第10行的算出来,把值赋给变量id10,这个变量是自己起的名字,前面呢有提到哦,然后再把第20行的结果赋给id20,最后相加就可以了。在最后记得用完之后把变量空间释放,用unset 加变量名就可以了。

(3)编写脚本/root/bin/sumspace.sh,传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和

答题:脚本内容如下:

第一次写的linux脚本

解题思路:首先定义两个变量s1,s2,因为是两个文件,所以定义两个变量,先说第一个变量的获取过程,cat $1查看第一个文件,然后通过管道符把结果传给下一个命令,接着通过grep截取行,这里注意的是^$在一块表示空白行,最后wc –l显示空白行数,变量二和变量一获取的过程一样,,这里就不多说了,最后一个命令是把两个行数加一起,得到想要的结果,$[]用于运算。

第二种方法:

第一次写的linux脚本

解题思路:这种方法比较简单,首先使用cat $@命令,非常巧妙,把两个文件内容合并到一起,注意,cat file1 file2时,是把两个文件内容合并 到一起显示的 ,容易被忽略,$@是把每个参数当做独立字符串,合起来就是把两个文件合并成一个文件显示出来,接着管道符后面是把空行行数显示出来 ,可以说这个思路非常巧妙,不过不是我写的,是我借鉴别人的,我很佩服。

原创文章,作者:lll,如若转载,请注明出处:http://www.178linux.com/83981

(0)
llllll
上一篇 2017-08-05 20:41
下一篇 2017-08-05 21:03

相关推荐

  • 第十周 N21 总有刁民想害朕

    1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情)   加电-MBR-GRUB-/sysinit-init X 对应的服务-/etc/rc.d     MBR        读取分区表     GRUB      &…

    Linux干货 2016-09-26
  • 源码包编译安装

    程序包编译安装:      Application-VERSION-release.src.rpm–> 安装后,使用rpmbuild命令制作成二进制格式的rpm包,而后再安装      源代码 –> 预处理 –> 编译 &#8…

    Linux干货 2016-08-23
  • 文件查找、压缩、归档

    一、文件查找 非实时查找(数据库查找)locate;实时查找find locate:从系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db查找,但是依赖于事先构建的索引; 索引的构建是在系统较为空闲时自动进行,管理员手动的更新数据库(updatedb),得用updatedb命令跟新数据库,才能快速查找,也要根据权限搜索…

    Linux干货 2016-11-27
  • 推荐-​以各种方式实现yum源,简单暴力,绝对实操干货!

    以各种方式实现yum源,简单暴力,绝对实操干货! 科普:yum不是程序包安装工具,而是rpm包前端管理工具,通过yum可以更好的管理rpm的安装卸载 以各种方式实现yum源,简单暴力,绝对实操干货! 一、本地yum源之“挂载光盘镜像实现”! 二、本地yum源之“挂载本地磁盘上的镜像文件”! 三、如能上网,实现自定义指定镜像网站yum源 四、炸天重磅来袭!!!…

    Linux干货 2016-04-11
  • 教你如何在Fedora,CentOS,RHEL中检查RPM包的依赖性

    我们都知道,在基于红帽的Linux系统中,一个RPM包,需要把先将它依赖的其他包安装好才能正常的工作。对于终端用户,RPM的安装、更新、删除中存在的依赖关系已经被工具透明化了(如 yum或 DNF等)。但如果你是系统管理员或者RPM包的管理员,你需要谙熟RPM包的依赖关系,以便及时更新、删除适当的包来保证系统的正常运行。 在本教程中,我将教大家如何检查RPM…

    Linux干货 2015-02-10
  • 马哥linux2014|2015全套教程

    1、本课程全程将基于集成了Openstack云环境、支持高精度时间(PTP)及虚拟化性能大大提升的RHEL 6.5或CentOS 6.6,间或介绍CentOS 7系统的使用; 2、此文章给出的只是个课程知识点框架,实际讲解过程相当精细;另外,知识点讲授的次序未必同此文章所标示的顺序相同; 3、第15期面授班定于2015年3月24号开课;本期将会是马哥教育数年…

    Linux干货 2015-07-14