初窥门径shell脚本

1.什么是shell脚本

   首先它是一个脚本,并不能作为正式的编程语言。因为是跑在linux的shell中,所以叫shell脚本。确切的说shell脚本就是一些命令的集合。

2.写脚本前的一些细节及建议

  Shell脚本通常都是以.sh 为后缀名的,这个并不是说不带.sh这个脚本就不能执行,只是大家的一个习惯而已。所以,以后你发现了.sh为后缀的文件那么它可能是一个shell脚本了。test.sh中第一行要以 “#! /bin/bash” 开头,它代表的意思是,该文件使用的是bash语法。如果不设置该行,虽然你的shell脚本也可以执行,但是这不符合规范。 # 表示注释。后面跟一些该脚本的相关注释内容以及作者和创建日期或者版本等等。当然这些注释并非必须的,如果你懒的很,可以省略掉,但是我们不建议省略。因为随着工作时间的逐渐过渡,你写的shell脚本也会越来越多,如果有一天你回头查看自己写过的某个脚本时,很有可能忘记该脚本是用来干什么的以及什么时候写的。所以写上注释是有必要的。另外系统管理员并非只有你一个,如果是其他管理员查看你的脚本,他看不懂岂不是很郁闷。

3.shell脚本编程基础 

 3.1 基本数学运算

    [root@localhost sbin]# vim first.sh 

    [root@localhost sbin]# bash first.sh 5 6

    11

    [root@localhost sbin]# cat first.sh 

    #! /bin/bash

    ##This is my first shell script

    ##Writen by zhangliang  2016-08-10

    echo $[ $1+$2 ]

    [root@localhost sbin]# 

    QQ图片20160811154025.png

    其中脚本中的$1和$2为shell脚本的预设变量,没有限制的。$0代表脚本本身的名字。

    

    [root@localhost sbin]# sh first.sh  1 2

    1 2 first.sh

    [root@localhost sbin]# cat first.sh 

    #! /bin/bash

    ##This is my first shell script

    ##Writen by zhangliang  2016-08-10

    echo "$1 $2 $0"

   上部中的“sh first.sh  1 2”命令其实一般需要有执行权限x   如没有则可用# chmod + first.sh来添加。

  3.2命令date

    实例 一.Y表示四位数字格式打印年份  y表示两位数字格式打印年份  其他的则为英文单词开头字母大写

               [root@localhost sbin]# date +"%Y-%m-%d %H:%M:%S"

               2016-08-11 19:07:24

         二. 表示前一天的日期:

               [root@localhost sbin]# date -d "-1 day" +%d

               10

    

   3.3参数前移

      [root@localhost sbin]# vim shift.sh 

     [root@localhost sbin]# sh -x shift.sh             由此可知shift命令每执行一次,变量的个数($#)

     + '[' 0 -eq 0 ']'                                                                               

     [root@localhost sbin]# sh -x shift.sh 1 2 3 4        减一, 变量值提前一位。                         

     + '[' 4 -eq 0 ']'

     + echo

                                                                                                  

     + shift                                                                                         

     + '[' 3 -eq 0 ']'                                                                                     + echo

     + shift

     + '[' 2 -eq 0 ']'

     + echo

     + shift                                                             

     + '[' 1 -eq 0 ']'

     + echo                                                QQ图片20160811204744.png

     + shift                                

     + '[' 0 -eq 0 ']'

     [root@localhost sbin]# vim shift.sh 

     [root@localhost sbin]# cat shift.sh 

   

 3.4如何计在shell脚本中锚定计数空格行

     [root@localhost sbin]# 

     [root@localhost sbin]# vim konghang.sh 

     [root@localhost sbin]# bash konghang.sh /etc/fstab /etc/issue

     Total blank lines: 2

     QQ图片20160811153943.png 

     shift命令还有另外一个重要用途,Bsh定义了9个位置变量,从$1到$9,这并不意味着用户在命令行只能使用9个      参数,借助shift命令可以访问多于9个的参数。

4实战演练

  4.1计算1+2+3+…+100的值

  初窥门径shell脚本

  初窥门径shell脚本

 4.2写一个脚本/root/bin/argsnum.sh,接受一个文件路径作为参数;如果参数个     数小于1,则提示用户“至少应该给一个参数”,并立即退出;如果参数个数不     小于1,则显示第一个参数所指向的文件中的空白行数

    #! /bin/bash

   ## writer:zhangliang 2016-8-13

   [[  $# -lt 1  ]] && echo "less input one num" || (grep '^$' | wc -l)

   [root@localhost sbin]# bash argsnum.sh /etc/rc.d/init.d/function

   105

   [root@localhost sbin]# bash argsnum.sh 

   less input one num

 4.3编写脚本/root/bin/disk.sh,显示当前硬盘分区中空间利用率最大的值

   #! /bin/bash

  ##wrtrer hangliang 2016-8-13

  max='df' |tr -s '' '%'|cut -d '%' -f5|sort -n|tial -1'

  echo "list the maxdisk liyonglu: $max"

  [root@localhost sbin]# ./disk.sh

  list the disk liyonglu: 52

 4.4.使用一个用户名做为参数,如果指定参数的用户存在,就显示其存在,否则添      加之;显示添加的用户的id号等信息

#! /bin/bash

##writerzhangliang:2016-08-12 11:09:20

read -p "please input a username: " USERNAME

#`id $USERNAM` &> /dev/null

if id $USERNAME &> /dev/null ; then

        echo "the user exist" 

        exit 100

else

        useradd $USERNAME &> /dev/null

        echo "the user add sucessfully and its info is:`id $USERNAME`"

        exit 99

fi

unset USERNAME

5小结

 由前面例题及小题,深有体会前面学的正则表达式grep,sed工具的重要性

 grep语法: grep  [-cinvABC]  'word'  filename

 -c :打印符合要求的行数

 -i :忽略大小写 -n :在输出符合要求的行的同时连同行号一起输出

 -v :打印不符合要求的行

 . 正则表达式中, “^” 表示行的开始, “$” 表示行的结尾,那么空行则可以用        “^$” 表示

 . 如果是数字的话就用[0-9]这样的形式,当然有时候也可以用这样的形式[15]即     只含有1或者5,注意,它不会认为是15。如果要过滤出数字以及大小写字母则     要这样写[0-9a-zA-Z]。另外[ ]还有一种形式,就是[^字符] 表示除[ ]内的字     符之外的字符

 . 表示任意一个字符,上例中,就是把符合r与o之间有两个任意字符的行过滤出      来, * 表示零个或多个前面的字符。 ‘.*’ 表示零个或多个任意字符,空行也包    含在内.

 .  用( )表示一个整体,例如(oo)+就表示1个 ‘oo’ 或者多个 ‘oo’

    sed与grep有些相通  ,sed -e可以实现多个行为;‘d’ 这个字符就是删除的动     作了,不仅可以删除指定的单行以及多行,而且还可以删除匹配某个字符的         行,另外还可以删除从某一行一直到文档末行; ‘s’ 就是替换的命令, ‘g’ 为本     行中全局替换,如果不加 ‘g’ 只换该行中出现的第一个。除了可以使用 ‘/’ 作为     分隔符外,还可以使用其他特殊字符例如 ‘#’ 或者 ‘@’ 都没有问题。[0-9]表       示任意的数字。这里你也可以写成[a-zA-Z]甚至[0-9a-zA-Z]; () 可以把替换     的字符括起来成为一个整体。

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

(0)
ZzuimengZzuimeng
上一篇 2016-08-15
下一篇 2016-08-15

相关推荐

  • 用户和组的四大配置文件简介

    一. 用户的由来 linux系统拥有的就是资源,最重要的事就是对资源的分配,资源分给谁?在linux上资源的访问是对用户赋予不同的权限实现,也就是说能访问资源的单位是用户。那用户在获取资源之前要实现证明自己是本用户,这个过程称为认证,他通过密码和用户名实现。在用户登录时会将用户输入的用户名和密码进行校验,校验过程就是将输入的用户名和密码与linux系统上记录…

    Linux干货 2016-10-24
  • shell脚本编程基础之二(if、case、for、while、until、continue、break语句使用)

    在shell脚本编程中,我们可以根据命令的状态结果,判断要不要执行下一步,但是有时候要判断的问题不止一个,甚至对问题本身都要做判断;同时问题的结果有时也不止一个,这时要借助简单的逻辑与和逻辑或,就显得很无力;要完成复杂的任务,需要借助一定的流程控制:顺序执行、选择执行、循环执行、同时在脚本执行过程中,有用户交互输入的需; if语句 case语句 for语句 …

    Linux干货 2016-08-21
  • httpd 2.2(Apache Web服务器)

    apache (Web服务器) 简介: Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。    Apache HTTP服务器是一个模块化的服…

    Linux干货 2016-03-30
  • 【招聘福利】上海/北京/深圳丨 云络科技丨招募linux系统运维工程师

    岗位要求: 1,安装服务器 – Linux CentOS + netinstall 2.服务器安全 – 用户、权限、iptables、sudo 3.计划部署Linux?高可用性,包括HA,LB 4.协助Leader完成复杂的网络设计 (完全冗余/故障迁移/高可用性) 5.用linux命令查看服务器(top/iostat/vmstat/sar/等) 6.安装、…

    Linux干货 2016-04-05
  • 网络互联参考模型(详解)

    网络互联参考模型 1. 什么是协议 为了使数据可以在网络上从源传递到目的地,网络上所有设备需要“讲”相同的“语言” 描述网络通信中“语言”规范的一组规则就是协议 例如:两个人交谈,必须使用相同的语言,如果你说汉语,他说阿拉伯语…… 数据通信协议的定义 决定数据的格式和传输的一组规则或者一组惯例 2. 协议分层 网络通信的过程很复杂: 数据以电子信号的形式穿越…

    Linux干货 2015-05-07
  • https实现

    实现https 搭建CA 颁发证书

    2018-01-29