• SHELL编程规范与变量


      shell相比标准开发语言比如JAVA,C,C++来说还是比较简单的,其实就是一堆命令的集合而已,初学者从简单的shell脚本学起,至于shell编程还是要有编程思想在里面,因此,循序渐进很重要,先研究格式语法,再研究编程,今天就列举一些shell里的概念,以便我们理解shell编程。

    1、脚本声明

      在写body之前要对shell脚本进行声明,告诉操作系统,这是一个shell文件,不声明的话系统默认为用bash来执行脚本。格式如下

      #!/bin/bash(这里的bash可以换成sh、dash、tcsh、csh等)

    2、脚本注释

      注释格式和一般的编程语言类似,为:#+内容

    3、脚本文件名称规范

      我们可以用.sh结尾,这是比较规范的写法,但是注意,其实linux里这个.sh不作为识别文件类型的参照,仅仅是用来标记这是一个脚本文件而已,方便我们维护。

    4、脚本执行方式

      source  [文件名]

      .  [文件名]

      ./  [文件名]  (注意这种方式文件需要有执行权限)

      bash/dash/sh    [文件名]

    5、管道符号

      管道符号的意思是把上一条命令的执行结果作为下一条命令的参数

      例如:cat /etc/passwd | grep "bash" | wc -l (统计下passwd文件下有"bash"的记录有多少行)

    6、重定向

      <0         /dev/stdin    标准输入

      1>   /dev/stdout 标准输出                       >>   追加而不是覆盖

      2>   /dev/stderr 标准错误输出      2>>   追加而不是覆盖

      &>   混合输出                &>>   追加而不是覆盖

    注意:符号里的 0、1、2数字可以省略

    例:

      ls > file   (意思是把ls查询出来的内容放入file文件里,而不是显示在屏幕上)

      ls &>  /dev/null  (把结果放入黑洞设备,不显示出来)

    例:

      cat test.txt  和  cat < test.txt 文件是一个意思

    7、自定义变量

      由用户自己定义、修改和使用,变量名以字母或下划线开头、区分大小写

    例1:

      name=Tom

      echo $name

      Tom

    例2:

      name='zhang san'

      echo $name

      zhang san
    例3:

      name=bb

      Name="$nameLY"

      echo Name

      bbLY

    例4:

      Name='$nameLY'

      echo Name

      $nameLY
    例5:

      TIME=`data`

      echo $TIME

      2016年10月25日星期五  12:32:55 CST

    例6:

      TIME=$(data)

      echo $TIME

      2016年10月25日星期五  12:32:55 CST

    例7:交互定义变量

    输入:read -p "please input your name:"NAME  

    交互:please input your name:zhangsan

    输入:echo $NAME

    输出:zhangsan

    例子总结:""识别里面的变量、''把里面当一个字符串、``把里面的命令执行结果定义

    8、预定义变量

      由bash预先定义好的一类特殊变量,用户只能用不能改。

    ~] #cat mybak.sh

    #!/bin/bash

    tar zcf $* $>/dev/null

    echo "已执行$0脚本"

    echo "共完成$#个对象的备份"

    echo"具体的内容包括:$*"

    ~] #./mybak.sh  /etc/passwd    /etc/shadow

    已执行./mybak.sh脚本

    共完成2个对象的备份

    具体的内容包括:/etc/passwd    /etc/shadow

    解析:$*或$@保存脚本要处理的参数、$0保存脚本名称、$#保存了脚本要处理的参数个数、$?保存着命令或脚本的运行状态码

    9、位置变量

      $n(n为1-9)就是位置变量

    ~] #vi test.sh

    #!/bin/bash

    echo $0

    echo $1

    echo $2

    echo $3

    ~] #source test.sh zhangsan cloud  yes

    ./test.sh

    zhangsan

    cloud

    yes

    注:$0是预定义变量,保存脚本名称

    10、环境变量

      使用env命令可以查看当前工作环境下的环境变量,PATH变量用于设置可执行程序的默认搜索路径,环境变量的全局配置为/etc/profile每个用户还有自己独立的配置文件 ~/.bash_profile。把路径可执行文件的路径写到PATH变量中,就可以直接用路径里的可执行文件。

    例如:apachectl start

    方法1:PATH=$PATH:/root   (临时生效,/root为可执行文件的存放路径,这句话意思是把/root这个目录添加到PATH变量里,是临时写入内存的)

    方法2:echo "PATH=$PATH:/root"  >> /etc/profile (永久生效)

    11、变量的作用范围

      默认情况下新定义的变量只在当前shell环境中有效,因此称为局部变量,当进入子程序或者新的shell环境时,局部变量将无法再次使用,为了解决这个问题,可以用export指定为全局变量。

      格式1:export 变量名

      格式2:export 变量名=变量值

    例:

      ~] #NAME=zhangsan

      ~] #echo $NAME

        zhangsan

      ~] #bash

      ~] #echo $NAME

      "输出为空"(因为切换shell环境了,而且变量没有指定为全局变量)

    12、运算

    例:

      ~] #A=11

      ~] #B=22

      ~] #C=$A+$B

      ~] #echo $C

        11+22

    注:shell中输出的值,linux默认为字符串。

    那个为了使运算得以进行,可以这样:

      expr [变量] [运算符]  [变量2]

      +加法  -减法  *乘法(是转意符,把*转意为乘)   /除法   %求模、取余

    例:

      ~] #x=35

      ~] #y=16

      ~] #c=`expr $x + $y`  (注:+ 左侧和右侧必须有空格)

      ~] #echo $c

        51

        

     

  • 相关阅读:
    Hibernate延迟加载机制
    Hibernate中Criteria的完整用法
    HibernateTemplate的常规用法
    Java各类在线API
    HibernateTemplate的常规用法
    Hibernate中Criteria的完整用法
    Java各类在线API
    Hibernate3的DetachedCriteria使用
    Hibernate延迟加载机制
    Hibernate3的DetachedCriteria使用
  • 原文地址:https://www.cnblogs.com/mangood/p/5996238.html
Copyright © 2020-2023  润新知