zoukankan      html  css  js  c++  java
  • Shell详解

    shell脚本

    变量

    shell允许用户建立变量存储,但不支持数据类型(所有数据只认为是字符串)"="号左右不能有空格
    变量尽量大写,便于区分

    声明:
    KEY=value
    KEY2=`命令` // 动态转换 命令置换 
    KEY3=$KEY
    输出:
    echo $KEY
    
    删除变量赋值 unset
    unset KEY
    
    
    env 当前环境变量

    位置变量

        $0  // 与键入的命令行一样,包含脚本文件名
        $1,$2...$9 // 分别包含第一个到第九个命令行参数
        ${10}  // 两位数以后需要用括号括起来
        $#  // 包含命令行参数的个数
        #@ // 包含所有命令行参数:"$0,$1....$9"
        $?  // 包含前一个命令的退出状态
        $*  //  包含所有命令行参数:"$0,$1....$9"
        $$      // 包含正在执行的进程id号

    程序和语句

    说明性语句(以#开始到结束,不被执行)

    ****特殊:第一行指定使用什么shell执行

    #! /bin/sh

    功能性语句(任意的shell命令,用户程序或其他的shell程序)

    read从标准输入读入一行,并赋值给后面的变量
    read var1 #把读入的数据全部赋给var
    read var1 var2 var3 #把读入的第一个内容赋给var1,第二个赋值给var2,其余的都给var3
    #如果执行read语句时标准输入无数据,则程序在此等候,直到数据的到来或被终止

    expr算数运算命令,包括加(+)、减(-)、乘(*)、除(/)、求模(%) 每一个运算符左右必须使用空格隔开
    expr 12 + 1 * 3

    结构性语句(条件测试、多路分支语句、循环语句、循环控制语句)

    条件测试

    test语句可以测试三中对象:字符串、整数、文件属性 (0为真1位假)

        例如:
            test `$answer` = yes # 变量answer的值是否为字符串yes
            test $num -eq 18  # 变量num的值是否为整数18
            test -d tem # 测试tep是否为一个目录名

    字符串:

    =、!=、-z(判断长度是否为0)、-n(判断长度是否不为0)

    整数:

    -eq(相等)、-ne(不相等)、-gt(大于)、-ge(大于等于)、-lt(小于)、-lt(小于等于)

    文件:

    -d name(测试name是否为一个目录)、

    -e name(测试文件是否存在)、

    -f name(测试是否为普通文件)、

    -L name(测试是否为符号链接)、

    -r name(测试文件是否存在且为可读)、

    -w name(测试文件是否存在且可写)、

    -x name(测试文件是否存在且可执行)、

    -s name(测试文件是否存在且长度不为0)、

    f1 -nt f2(测试f1是否比f2跟新)、

    f1 -ot f2(测试f1是否比f2更旧)

    分支语句

    条件语句

    if [ 表达式 ]
      then 命令表 #如果表达式为真执行then后的命令表,命令表可以是一条,也可以是多条
    fi
    Demo:
    #!/bin/bash
    if [ $# -ne 1 ]
    then
        echo "$0 filename"
    fi

    多条件语句

    if [ 表达式 ]
      then 命令表 #如果为真返回
    elif [表达式]
      then 命令表 #如果为真返回
    ....
    else
      命令表 #反之执行
    fi

    case分支

        case 字符串变量 in
            模式1)
                命令表1
                ;;  #终止符
            模式2|模式3) #条件或
                命令表2
                ;;
            ...
            模式n)
                命令表n
                ;;
            *)  #default
                命令表*
        esac

    循环语句

    for循环 

    变量依次取单词表中的各个单词,每取一次执行一次循环体中的命令,循环次数由单词表中的单词数确定,命令表中的命令可以是一条,也可以是以分号或者换行符分开的多条

        for 变量名 in 单词表
            do
                命令表
            done
    Demo:
        for I in 1 3 5 7 9    # 配合seq使用:seq 起始数 步长 终点 #生成数列 步长可以省略
        do
            echo "$I"
        done
        
    for循环2
        for ((变量声明;执行条件;变量修改))
        do
            命令表
        done
        
    Demo:
        for ((I=1;I<=10;I++))
        do
            echo "$I"
        done
        
    Demo:
        for ((;;)) #无限循环
        do    
            echo "for"
        done

    while循环

    while循环测试命令或表达式的值,如果为真就执行循环体的内容直到为假退出;while语句的退出状态为命令表中被执行的额最后一条命令的退出状态

        while 命令或表达式
            do
                命令表
            done

    循环控制语句

    break、continue

    函数

    函数的调用格式

    方式1
    value_name=`function_name[args1 args2 ...]` #所有的标准输出都传递给主程序的变量
    方式2
    function_name[args1 args ...]
    echo $? #所有输出都被$?吸收

    函数定义

        function_name(){
            代码块
        }
    
    demo
    
    function_name()
    {
      echo $1
      return $1  #可以省略
    }
    TXT=1
    function_name $TXT
    echo $? #获取到return值
    Songzhibin
  • 相关阅读:
    USTC 软硕讯飞班参考资源
    nginx 负载均衡
    Meidawiki 配置
    10 款实用的jquery插件
    Mongodb 定时释放内存
    互联网产品精神解读
    简单的缓冲区溢出实验
    fatal error C1902: 程序数据库管理器不匹配;请检查安装解决
    C#的override、new、vitutal一例
    SQL Server 2008导入、导出数据库
  • 原文地址:https://www.cnblogs.com/binHome/p/12817179.html
Copyright © 2011-2022 走看看