码迷,mamicode.com
首页 > 系统相关 > 详细

linux-shell脚本编程-变量-算术表达式-判断语句-if分支语句

时间:2015-08-18 10:15:14      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:

bash工作特性:
    1.支持命令历史、命令补全
    2.支持管道、重定向
    3.支持命令别名
    4.支持命令行编辑
    5.支持命令行展开 
    6.支持文件名通配
    7.支持使用变量
    8.支持编程
命令编辑:
光标跳转:ctrl+a:跳到命令行首  home
            ctrl+e:跳到命令行尾  end
            ctrl+u:删除光标至命令行首的内容
            ctrl+k:删除光标至命令行尾的内容
             ctrl+l:清屏  clear
命令历史:bash会自动记录过去曾经执行过的命令,会保存到内存缓存中
          ↑或者history
            history  -w:将缓存中的命令历史保存到历史文件中.bash_history
            history  -c:清空命令历史
    命令历史的使用技巧:
        !n:执行命令历史中第N条命令
        !-n:执行命令历史中倒数第N条命令
        !!:执行上一条命令
        !string:执行命令历史中最近的一个以指定字符串开头的命令
        !$:引用前一个命令的最后一个参数
        先按esc松开再按。(点)
        一起按alt+。(点)

bash支持的引号:
` `:命令替换
" ":弱引用,可以实现变量替换
‘ ‘:强引用,不可以实现变量替换

文件名通配:
*:匹配任意长度的任意字符
?:任意单个字符
[]:匹配指定范围内的任意字符
[a-z]  [a-zA-Z] [a-z0-9]
[^]:匹配指定范围之外的任意字符
[^0-9]

   

shell 基本语法
变量
表达式
判断语句
if表达式

shell基础:
#!/bin/bash   -->shbang-解释shell的绝对路径
作用:显示后期命令以哪种shell来执行这些
     命令。如不指shell,以当前shell作为执行的shell
两种注释:
#
;
shell程序一般以sh结尾

创建执行shell程序的步骤
    第一步:创建一个包含命令和控制结构的shell文件。
    第二步:修改这个文件的权限使它可以执行。
            使用chmod u+x
     第三步:执行
        方法1:[root@pagoda63 shell]# ./expr.sh
        方法2:使用绝对路径 [root@pagoda63 ~]# /root/shell/expr.sh
        方法3:[root@pagoda63 ~]# bash /root/shell/expr.sh
        方法1,2需要给x权限,方法3不用,直接bash

=======================================================================
shell变量-->内存空间,命名
    变量是shell 传递数据的一种方法。变量是用来代表每个值的符号名。
    Shell 有两类变量:临时变量和永久变量。
        临时变量:是shell 程序内部定义的,其使用范围仅限于定义它的程序,对其它程序不可见。
        永久变量:是环境变量,其值不随shell 脚本的执行结束而消失。
=======================================================================================
   变量命名规则:
    1.只能包含字母,数字和下划线,并且不能数字开头
    2.不应跟系统中已有的环境变量重名
    3.见名知意
    环境变量
        定义:作用域为当前shell进程及其子进程
        查看环境变量:
            echo $PATH
            env
            用作运行某个命令的时候,本地查找不到某个命令或文件,会到这个声明的目录中去查找。
            export VARNAME=VALUE
                    脚本在执行时会启动一个子shell进程
                     命令行中启动的脚本会继承当前shell环境变量
                    系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量

    用户定义变量-->本地变量
        set VARNAME=VALUE:作用域整个bash进程
        由字母或下划线打头。 由字母、数字或下划线组成,并且大小写字母意义不同。变量名长度没有限制
    ?使用变量值时,要在变量名前加上前缀 "$”
  
    局部变量:
        local VARNAME=VALUE :作用域为当前代码段
        变量赋值:赋值号“=”两边应没有空格。
            [root@pagoda63 ~]# A=`date`
            [root@pagoda63 ~]# echo $A
            Fri Apr 24 17:18:46 CST 2015

         PATH=$PATH:.  当前路径添加进环境变量--不安全


          [root@pagoda63 ~]# P=${PATH} 把PATH变量值赋给P
          [root@pagoda63 ~]# echo $P


          [root@pagoda63 ~]# T=$(date) 命令--动作
          [root@pagoda63 ~]# T=`date`   同上
          [root@pagoda63 ~]# echo $T
    
     脚本里面的执行结果传不到外面,是独立
     脚本执行时新建了个子shell ,独立

        可以利用变量和其它字符组成一个新的字符串。
            [root@pagoda63 ~]# MYDIR=/home/test01
            [root@pagoda63 ~]# echo "$MYDIR/ttt"
            /home/test01/ttt
            [root@pagoda63 ~]# echo Today is $DAYday
            Today is
            [root@pagoda63 ~]# echo Today is $DAY day
            Today is mon day
            [root@pagoda63 ~]# echo Today is ${DAY}day
            Today is monday

        列出所有的变量:
            set 命令
                [root@pagoda63 ~]# set | grep DAY
                DAY=mon
       
        给变量赋值多个单词:
            [root@pagoda63 ~]# NAME="hh-ll"
            [root@pagoda63 ~]# echo $NAME
            hh-ll

            [root@pagoda63 ~]# NAME=‘gg kk‘
            [root@pagoda63 ~]# echo $NAME
            gg kk

            [root@pagoda63 ~]# NAME="jj uu $NAME"
            [root@pagoda63 ~]# echo $NAME
            jj uu hh ll
           
            [root@pagoda63 ~]# NAME=‘jj uu $NAME‘
            [root@pagoda63 ~]# echo $NAME
            jj uu $NAME

    单引号和双引号的区别:
         单引号之间的内容原封不动地指定给了变量。
         双引号取消了空格的作用,特殊符号的含义保留。
    
   
     位置变量:Shell解释执行用户的命令时,
                将命令行的第一个字作为命令名,而其它字作为参数
                。由出现在命令行上的位置确定的参数称为位置参数。 
             位置变量:使用$N 来表示
            $1,$2,....
                [root@xuegod63 test]# ./example.sh file1 file2 file3
                $0 这个程序的文件名 example.sh
                $n 这个程序的第n个参数值,n=1..N
               
   
    特殊变量:
        有些变量是一开始执行Script脚本时就会设定,且不能被修改,但我们不叫它只读
        的系统变量,而叫它特殊变量。这些变量当一执行程序时就有了,
        以下是一些等殊变量:
            $?:上一个命令执行状态返回值:
                         程序执行后,可能有两类返回值
                            程序的执行结果
                                     程序状态返回代码(0-255)
                                         0:正确执行
                                        1-255:错误执行。1,2,127系统预
            $*    这个程序的所有参数
            $#    这个程序的参数个数
            $$    这个程序的PID
            $!    执行上一个后台程序的PID
            $@:   这个程序的参数列表
   
    引用变量:${VARNAME} {}有时可省略
    撤销变量:
        unset VARNAME
    查看当前shell中变量
        set
    查看当前shell中的环境变量
        printenv
        env
        eport
                 特殊变量,位置变量没法查看
===========================================================================   
    Read命令:
         作用:从键盘读入数据,赋给变量
            [root@pagoda63 ~]# read a b c
            8 9 12
            [root@pagoda63 ~]# echo $a $b $c
            8 9 12
        在shell脚本中使用
     [root@pagoda63 ~]# read a b
     1 2 3
     You have new mail in /var/spool/mail/root
     [root@pagoda63 ~]# echo $b
     2 3
    
     [root@pagoda63 ~]# read a b c
     1 2
     [root@pagoda63 ~]# echo $c





    expr 命令
        作用:Shell变量的算术运算:
       expr命令:对整数型变量进行算术运算
        语法: expr  表达式    #注意 运算符之间要有空格
            +: expr 3 + 5
            -:expr $var1 - 5
            *:expr $var1 \* $var2
            / :expr $var1 / $var2
                复杂的运算:
                    var4=8
                     expr `expr 5 + 11` / $var4

bash中如何实现条件判断?
条件测试类型:

     整数测试

     字符测试

     文件测试
条件测试的表达式:

     [ expression ]

     [ [ expression ]
           
   
整数比较:

     -eq:测试两个整数是否相等
          $A -eq $B
          echo $?
          0 or 1
     -ne:测试两个整数是否不等:不等为真,相等为假
     -gt:测试一个数是否大于另一个数:大于为真
     -lt:测试一个数是否小于另一个数:小于为真
     -ge:大于或等于
     -le:小于或等于

字符串测试:
     ==:等值比较,等为真
     !=:不等比较,不等为真
     >:大
     <:小
     -n string 测试指定字符串是否为空,空则真,不空则假
     -s string 测试指定字符串是否不空,不空则真,空则假

文件测试:

     -e FILE :文件是否存在
     -f FILE : 测试文件是否为普通文件
     -d FILE : 测试指定路径是否为目录
     -r FILE :测试当前用户对指定文件是否有读权限
     -w FILE :.............................写权限
     -x FILE:..........................执行权限
    -s FILE:测试文件是否为空

命令间的逻辑关系

     逻辑与:&&或-a
          第一个条件为假时,第二个条件不用再判断,最终结果已经有;
          第一个条件为真时,第二个条件必须再判断
          id ylion &> /dev/null && echo "hello ylion
          ! id user1 && useradd user1
     逻辑或:||或-o
         逻辑或 。 两个条件有一个成立 ,结果为真
         id user1 || useradd user1

     非:!
        取反
   
===============================================================
流程控制
    顺序
    选择
    循环
   
选择结构之if语句

单分支if语句
    if 判断条件; then
        statement1
        statement2
       
        .........
    fi

双分支if语句
    if 判断条件; then
         statement1
         statement2

         ....
    else
         statement3
         statement4
         ....

    fi
        
多分支if语句:

    if 判断条件1; then
         statement1
         ....

    elif 判断条件2; then
         statement2
         .....

    elif 判断条件3; then
     statement3
     .....

    else
         statement4
        ......

    fi
 
           

shell中如何进行算术运算
    1.let 算术运算表达式
         let c=$a+$b
         echo $c
    2.$[算术运算表达式]
         c=$[$a+$b]
    3.$((算术运算表达式))
         c=$(($a+$b))
    4.expr 算术运算表达式 表达式中各操作数及运算符之间要有空格,而且使用命令引用
         c=`expr $a + $b `

定义脚本退出状态码
    exit:退出脚本
    定义脚本执行状态结果
    exit # 0-255
    如果脚本没有明确定义退出状态码。那么最好执行的一条命令的退出码即为脚本退出状态码

          
           
1.精确找出有效的IP地址

2.写一个脚本,完成以下要求
(1)添加3个用户test1、test2、test3,并设置密码。但要先判断用户是否存在,不存在则添加
(2)显示当前系统共有多少个用户

3.写一个脚本,完成以下要求
指定一个存在的用户,自己用变量保存
(1)如果其UID为0,则显示此用户为管理员
(2)否则,就显示其为普通用户      

linux-shell脚本编程-变量-算术表达式-判断语句-if分支语句

标签:

原文地址:http://www.cnblogs.com/ylion/p/4738535.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!