shell脚本编程

一、概念

    shell是一个命令行解析器,它读取用户输入,然后执行命令。

    如果把 shell 命令比作盖房子的砖瓦,那 shell 脚本就是用一块块砖瓦建起来的房子了。我们可以通过一些约定的格式来将那些小巧的命令组合起来,实现更加自动化更加智能的所谓 shell 脚本。

二、脚本格式

    脚本的第一行必须写成类似这样的格式:
        #!/bin/bash     这是给系统指定一款shell解析器
        myname="zhou"
        echo $myname

    脚本不需要编译,直接运行即可,首次运行记得赋予权限。
        如:
    #    chmod u+x test.sh
    #    ./test.sh

三、变量

1.自定义变量 (如myname)
2.环境变量(PATH 环境变量的作用是保存系统中可执行程序或脚本的所在路径)
3.命令行变量 (如$# $* 脚本内部使用用户从命令行中传递进来的参数)
    $0       代表脚本名称
    $#       代表命令行个数
    $* = $@  代表所有参数
    $n       第n个参数
    $?       最后一个命令执行的返回值
    $$       代表当前shell的进程号PID

四、特殊符号

1.引号
    ""  ---双引号  里面可以包含字符,变量引用,和命令
        echo "A=$A,today is `date`" 会将变量和命令进行转化

    ''  ---单引号  里面内容都是普通字符
        echo "A=$A"  打印出来也是字符,不会转化

    ``  ---反引号  作用就是在双引号中标志初命令
        echo `ls` 会打印命令执行的结果

2.管道 | (将前面的命令的执行结果输送给后面的命令)

    ls -l | wc

3.重定向 >,< 

    ls -l > a.txt (将ls -l 的结果重定向到a.txt文件中)

五、测试语句

test可用[ ]代替 ;

1. test -e file     判断文件file是否存在(等同于[ -e file ] )
   -r(可读)   -w(可写)  -x(可执行) -d(目录) -f(普通文件) -s(非空)

2. test s1 = s2     判断字符串s1和s2是否相同
     !=(不同)  <(长度小于) >(长度大于) -n(长度非0) -z(长度为0)

3. test n1 -eq n2  [ n1 -eq n2 ] 判断数值n1是否等于n2
    -ne(不等于) -gt(大于) -ge(大于等于)  -lt(小于) -le(小于等于)

六、脚本语法

(1)分支控制
            if [ -e file] && [ -r file ]  判断文件是否存在且可读
            then
                cat file      若为真 则查看file内容    
            elif [ -e file]   否则 判断文件是否存在
            then
                chmod u+r file 若存在则给予读权限
                cat file
            else               否则创建文件
                touch file  
            fi
        代码中的分支语句的语法要点有这么几处:
            1,每一个 if 语句都有一个 fi作为结束标记。
            2,分支结构中使用 then 作为起始语句。
            3,当 if 测试语句为真时,then 以下的语句才会被执行。 

        多路分支,可使用case语句:
            read A
            case $A in  判断用户输入的值$A
                1) echo "one"  如果$A为1,则显示 one
                    ;;    
                2) echo "one"
                    ;;
                *) echo "unknow"   //*为通配符,代表任意字符
            esac


(2)循环控制
        while循环语句

            declare -i A=0  //声明A为数值,不然默认是字符串
            while [ $A -lt 100]
            do
                echo $A
                A=$A+1
            done


        until循环语句

            declare -i B=0
            until [ B -eq 100]
            do
                echo $B
                B=$B+1
            done

        for循环语句

            file=`ls`
            for a in $file
            do
                echo $a
            done
        注意:for 循环中,in 后面接的是一个字符串,字符串里面包含几个单词循环体就执行几遍,每执行一遍 a 的值都轮换地等于字符串里边的各个单词。

(3)函数
        choose_max()    定义一个函数,不用写返回值和参数
        {
            if [ $1 -le $2 ]
            then
                return $2
            else
                return $1
            fi
        }

            declare -i A=0
            declare -i B=0
            echo "input a"
            read A
            echo "input b"
            read B

            choose_max $A $B

            if [ $? -eq $A ]
            then 
                echo "A is max"
            else
                echo "B is max"
            fi



        注意几点:函数的定义中,括号里面不能写任何东西(第一行);函数必须定义在调用之前;给函数传参的时候,传递的参数在函数的定义里用$n 来表示第 n 个参数。$?代表函数调用的返回值。

七、shell中的运算

expr   +   -   \*   /   %   

 `expr  $a + $b` 计算a+b的值
 `expr  $(($a + $b))  \*  $c`
 `expr  \(  $a + $b  \)  \*  $c`

例子:

declare -i a=10
declare -i b=20
declare -i c=30 

echo `expr  $a + $b`
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值