shell脚本基础

shell脚本编程基础

1、基本格式

首先在编写shell的开始要声明一下该shell所用的脚本类型,我们也称为shebang机制
eg: #!/bin/bash
    # Description
     ...

2、bash中的变量的种类

(1)、本地变量  生效范围: 当前shell进程,对当前shell之外的进程及子进程均无效
(2)、环境变量  生效范围: 当前shell进程及其子进程
      变量声明
             export     name=Value
             declare -x name=Value
      变量撤销 unset name 
      变量引用
             $name 或 ${name}
      显示所有的环境变量
             env 、export、declare -x 、printenv
(3)、局部变量  生效范围: 当前shell进程中某片代码段(通常指函数)
(4)、位置变量: 用$1 $2 $3 ... 来表示,用于脚本中调用传递给它的参数
      只读变量: 只能声明,但不能修改和删除
              声明变量 readonly name 
                       declare -r name 
              查看只读变量 readonly -p 

(5)、特殊变量: $? $0 $* $@ $# $$
      $? 检查上一条命令是否执行成功 
         echo $?   成功为0
                   非0不成功
      $0 表示命令本身
      $# 表示传递给脚本的参数个数
      $* 传递给脚本的所有参数  "$*" 将全部参数合并为一个字符串 
      $@ 传递给脚本的所有参数  "$@" 每个参数为单独的字符串
      $$ 显示当前自己的进程编号
(6)、在shell中() {}的区别
     (): 表示在当前shell的子进程中再开一个进程
     {}: 不在当前的shell进程中开子进程,顺序执行
eg:
[root@Centos6 ~]#x=abc;(echo $x;x=def;echo $x);echo $x
abc
def
abc
[root@Centos6 ~]#x=abc;{ echo $x;x=def;echo $x; };echo $x
abc
def
def

3、算数运算

(1)、算数运算
          包括: + - \* / % **
实现算术运算:
     let Var=expression
[root@Centos6 ~]#a=100
[root@Centos6 ~]#b=200
[root@Centos6 ~]#let c=a+b
[root@Centos6 ~]#echo $c
300
     Var=$[expression]
[root@Centos6 ~]#c=$[a+b]
[root@Centos6 ~]#echo $c
300
     Var=$((expression))
     Var=$(expr arg1 arg2 ...) 注: 参数间要有空格
[root@Centos6 ~]#c=$(expr $a + $b)
[root@Centos6 ~]#echo $c
300
     declare -i Var=Value
     echo "expression" | bc
bash中有内建的随机数生成器
     echo "$[$RANDOM%100]" : 生成0-99之间的随机数
[root@Centos6 ~]#echo "$[$RANDOM%100]"
53
(2)、赋值
   增强型赋值: += -= *= /= %=
   eg: let a+=5  ==》a=a+5
   其中 ++a : a先自加1后在赋值给a
        a++ : 先赋值后自加1

4、条件测试

(1)、条件判断

判断方法:
         test expression
         [ expression ]   注意: 表达式与[]间要有空格,不支持正则表达式
         [[ expression ]] 支持正则表达式
判断一个参数是否被赋值
         [ "$a" ]  
         echo $?  0为被赋值
                  非0未被赋值
短路与 &&
eg: CMD1 && CMD2 CMD1为真CMD2才执行
短路或 ||
eg: CMD1 || CMD2 CMD1为假CMD2才执行
与 -a 
或 -o
非 -not 或!

(2)、字符串判断

字符串 :
     == :是否等于
     >  :ASCII码是否大于
     <  :ASCII码是否小于
     != :是否不等于
     =~ :左侧字符串能否被右侧的PATTERN所匹配
         注:此表达式一般用于[[ ]];扩展的正则表达式
eg: [[ $a =~ ^-?[0-9]+$ ]] 判断$a是否为数字(正数、负数、0)
        [ -z "$a" ] 空为真
        [ -n "$a" ] 非空为真

(3)、文件存在性判断

文件判断:
         -a file :
         -e file : 文件是否存在,存在为真,反之为假
eg : [ -e "file" ]
所属类别:
         -b file:是否存在且为块设备文件
         -c file:是否存在且为字符设备文件
         -d file:是否存在且为目录文件
         -f file:是否存在且为普通文件
         -h | -L file:是否存在且为连接文件
         -p file:是否存在且为管道文件
         -S file:是否存在且为套接字文件
权限类:
         -r file:是否存在r权限的文件
         -w file:是否存在w权限的文件
         -x file:是否存在x权限的文件
         -u file:是否存在suid权限的文件
         -g file:是否存在sgid权限的文件
         -k file:是否存在sticky权限的文件
文件大小:
         -s file: 文件是否存在且非空
双目测试: 
         file1 -ef file2 :file1与file2是否指向同一个设备上的inode
         file1 -nt file2 :file1是否新于file2
         file1 -ot file2 :file1是否旧于file2

5、read命令接受参数的输入

从标准输入中读取值,给每个单词分配一个变量,剩余的单词都被分配给最后一个变量
     -p :指定要显示的信息
     -s :静默输入
     -d :指定输入的结束符
     -t#:超时时间
eg : read -p "Please input a arguement"  aaa  
特殊用法:
         read a b c <<< "xxx yyy zzz"可以将值附给a b c

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

(0)
上一篇 2017-08-04 08:13
下一篇 2017-08-04 09:22

相关推荐

  • 6个用于大数据分析的最好工具

    大数据是一个含义广泛的术语,是指数据集,如此庞大而复杂的,他们需要专门设计的硬件和软件工具进行处理。该数据集通常是万亿或EB的大小。这些数据集收集自各种各样的来源:传感器,气候信息,公开的信息,如杂志,报纸,文章。大数据产生的其他例子包括购买交易记录,网络日志,病历,军事监控,视频和图像档案,及大型电子商务。  在大数据和大数据分析,他们对企业的影…

    Linux干货 2015-04-04
  • 2016-08-18博客作业

    case 语句 条件判断语句 case 用 变量引用 in PAT1) 分支1 ;; PAT2) 分支2 ;; … *) 默认分支 ;; esac   case 支持glob 风格的通配符: *       任意长度任意字符 ?    &…

    Linux干货 2016-09-19
  • 笔记整理:权限管理1-基础权限管理&默认权限

    权限管理: 权限的分配根据owner和group来进行分配的   对于文件,各个权限的意义: r:可以使用工具查看内容 w:往里写 x:运行,提请内核发起一个进程 对于目录,各个权限的意义: r:用ls 查看目录列表   w:可以创建或删除目录中的文件   x:可以使用ls -l查看文件列表,也可cd进去   管理命令…

    Linux干货 2016-08-05
  • 马哥教育网络班21期-第6周课程练习

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

    Linux干货 2016-08-30
  • CentOS上配置rsyslog客户端用以远程记录日志

    rsyslog是一个开源工具,被广泛用于Linux系统以通过TCP/UDP协议转发或接收日志消息。rsyslog守护进程可以被配置成两种环境,一种是配置成日志收集服务器,rsyslog进程可以从网络中收集其它主机上的日志数据,这些主机会将日志配置为发送到另外的远程服务器。rsyslog的另外一个用法,就是可以配置为客户端,用来过滤和发送内部日志消息到本地文件…

    Linux干货 2015-02-14
  • 基于keepalived实现高可用nginx服务

    基于keepalived实现高可用nginx服务 环境及配置前提说明 主机1,ip:192.168.25.140 运行web服务 主机2,ip:192.168.25.141 运行web服务 主机3,ip:192.168.25.138 运行nginx服务和keepalived服务 主机4,ip:192.168.25.139 运行nginx服务和keepaliv…

    Linux干货 2016-11-07