• Shell编程学习总结


    Shell编程总结

    一、Hello World

    新建文件test.sh

    然后编辑代码:

    #!bin/bash/
    
    echo “hello world !”

    cd 到目标目录下:

    chmod +x ./test.sh    #使脚本有执行权限
    
    ./test.sh        #运行脚本

    另一种运行方式:

    sh test.sh

    二、变量

    1. 变量名要求:

    a)     只能是数字,字符,下划线,并且首字母不能是数字

    b)     中间不能有空格,但是可以有下划线

    c)      不能用关键词

    1. 使用变量:
    myshell=”12345”
    
    echo ${myshell}

    花括号加不加都行,加花括号只是方便解释器识别变量边界。

    另外变量和运算符之间不能有空格。

    1. 只读变量
    myshell=“1234”
    
    readonly myshell

    只读变量意味着不能更改

    1. 删除变量
    myshell=”1234”
    
    unset myshell

    echo myshell #可以看到什么也没输出

    1. 变量类型

    a)     局部变量:只在shell中起作用,shell运行的时候其他命令不能调用它

    b)     环境变量:shell运行的时候,其他命令可以调用的

    c)      shell变量:是由shell程序设置的特殊变量,有局部变量也有环境变量,这些变量是保证shell的正常运行

    1. shell字符串

    a)     单引号:

                              i.          任何字符都会原样输出,单引号里面的变量无效

                             ii.          单引号里面不能出现单引号(转义的也不行)

    b)     双引号

                              i.          双引号里可以有变量

                             ii.          双引号里可以出现转义字符

    eg:

           

    #!/bin/bash
    
    yourname='lihua'
    
    myshell="Hello, I know you are "${yourname}"!"
    
    echo ${myshell}
    1. 拼接字符:
    #!/bin/bash
    
    yourname="lihua"
    
    chat="Hello, "$yourname" !"
    
    chat1="Hello, ${yourname} !"
    
    echo ${chat} ${chat1}
    1. 获取字符串长度
    #!/bin/bash
    
    myshell="123"
    
    echo ${#myshell}
    1. 提取子串
    #!/bin/bash
    
    string="I'm AI"
    
    echo ${string:1:2}

    这个地方运行的时候用sh test.sh可能会不兼容,可以用 chmod +x ./test.sh运行

    1. 查找子串
    #!/bin/bash
    
    string="hello, AI"
    
    echo `expr index "$string" h` #两边的不是单引号是Esc键下边的那个符号,句式是固定的的
    1. shell数组

    shell只支持一维数组

    a)     格式:

                  数组名=(val1 val2…) #用空格分离

    value=(1 2 3 4)

    b)     随机访问下标:

    value[1]=1

    c)      读取数组:

                              i.          ${数组名[下标]}

                             ii.          读取全部元素${数组名[@]}

    d)     获取长度

    # 取得数组元素的个数

    length=${#数组名[@]}

    # 或者

    length=${#数组名[*]}

    # 取得数组单个元素的长度

    lengthn=${#数组名[n]}

    1. shell注释

    前面加#

    三、shell传递参数

    传递参数的格式,$n,$0表示执行文件名,$1表示第一个参数,之后以此类推:

           A+B的小例子:

                 

     #!/bin/bash
    
    echo "name:$0"
    
    a=$1
    
    b=$2
    
    c=`expr ${a} + ${b}`
    
    echo ${c}

     

           几个特殊符号:

    参数处理

    说明

    $#

    传递到脚本的参数个数

    $*

    一第一个单字符显示所有脚本传递的参数。

    $$

    脚本运行的当前进程ID号

    $!

    后台运行的最后一个进程的ID号

    $@

    与$*相同,使用时加引号,是返回每个参数

    $-

    显示shell使用的当前选项,与set命令功能相同

    $?

    显示最后命令的退出状态。0表示没有错误,其他任何值都表示有错误。

    四、shell基本运算符

    a)     基本包括:算数运算符、关系运算符、布尔运算符、字符串运算符、文件测试运算符。

    bash不支持原生的数学运算,可以通过其他命令来实现,awk和expr

    b)     算数运算符

    运算符

    说明

    举例

    +

    加法

    `expr $a + $b`

    -

    减法

    `expr $a - $b`

    *

    乘法

    `expr $a * $b`

    /

    除法

    `expr $a / $b`

    %

    取余

    `expr $a % $b`

    =

    赋值

    a=$b

    ==

    相等,返回true

    [$a == $b]

    !=

    不相等,返回true

    [$a != $b]

    #!/bin/bash
    
    a=1
    
    b=2
    
    if [ $a == $b ]
    
    then     
    
           echo "equal"
    
    fi
    
    if [ $a != $b ]
    
    then
    
           echo "not equal"
    
    fi

    c)      关系运算符

    运算符

    说明

    举例

    -eq

    两个数是否相等

    [ $a –eq $b ]

    -ne

    两个数是否不相等

    [ $a –ne $b ]

    -gt

    左边是否大于右边

    [ $a –gt $b ]

    -lt

    左边是否小于右边

    [ $a –lt $b ]

    -ge

    左边是否大于等于右边

    [ $a –ge $b ]

    -le

    左边是否小于等于右边

    [ $a –le $b ]

    d)     布尔运算符

    运算符

    说明

    举例

    !

    非运算

    [ ! false ]

    -o

    或运算

    [ $a –lt 20 –o $b –gt 100 ]

    -a

    与运算

    [ $a –lt 20 –a $b –gt 100 ]

    e)     逻辑运算符

    运算符

    说明

    举例

    &&

    逻辑的AND

           [[ $a -lt 100 && $b -gt 100 ]]

    ||

           逻辑的 OR

    [[ $a -lt 100 || $b -gt 100 ]]

    f)      字符串运算符

    运算符

    说明

    举例

    =

    检测两个字符串是否相等

    [ $a = $b ]

    !=

    检测两个字符串是否不等

    [ $a != $b ]

    -z

    检测字符串长度是否为零

    [ -z $a ]

    -n

    检测字符串长度是否不0

    [ -z $a ]

    str

    检测字符串是否为空

    [ $a ]

    g)     文件测试符

    操作符

    说明

    举例

    -b file

    检测文件是否是块设备文件

    [ -b $file ]

    -c file

    检测文件是否是字符设备文件

    [ -c $file ]

    -d file

    检测文件是否是目录

    [ -d $file ]

    -f file

    检测文件是否是普通文件

    [ -f $file ]

    -g file

    检测文件是否设置了SGID位

    [ -f $file ]

    -k file

    检测文件是否设置了黏着位

    [ -k $file ]

    -p file

    检测文件是否有名管道

    [ -p $file ]

    -u file

    检测文件是否设置了SUID位

    [ -u $file ]

    -r file

    检测文件是否可读

    [ -r $file ]

    -w file

    检测文件是否可写

    [ -w $file ]

    -x file

    检测文件是否可执行

    [ -x $file ]

    -s file

    检测文件是否为空

    [ -s $file ]

    -e file

    检测文件是否存在

    [ -e $file ]

    五、echo命令

    a)     显示字符串

                     i.          echo “It is a test”

                   ii.          双引号可以省略:echo It is a test

    b)     显示转义字符

                     i.          echo “”It is a test ””

    c)      显示变量

    #!/bin/bash
    
    read name
    
    echo "$name from read"

    d)     显示换行

                     i.          echo –e “ok! ” # -e 开启转义

    echo “It is a test”

    e)     显示不换行

                     i.          echo –e “ok! c” # -e 开启转义

    echo “It is a test”

    f)      将结果重定向至文件

                     i.          echo “It is a test” > myfile

    g)     原样输出到字符串,不进行转移或取变量

                     i.          echo ‘$name”’s

    h)     显示执行命令结果

                     i.          echo `date`  #这里用的是反引号

    六、Shell流程控制、

    a)     if

    语法格式:

    if condition
    
    then
           command1
    
           command2
    
            …
    
    fi

    b)     if else

    if condition
    
    then
    
           command1
    
           …
    
    else
    
           command1
    
           …
    
    fi

    c)      if else-if else

    if condition1
    
    then
    
           command1
    
    elif condition2
    
    then
    
           command1
    
    else
    
           commandm
    
    fi

    d)     for 循环

    格式:

           

    for var in item1 item2 … itemN
    
    do
    
        command1
    
        command2
    
        …
    
    Done

    例子:

    #!/bin/bash
    
    value=(A B C D)
    
    for var in ${value[@]}
    
    do
    
           echo "The value is: $var"
    
    done
    
    for loop in A B C D
    
    do  
    
           echo "The value is: $loop"
    
    done

    e)     while循环

    while condition
    
    do
    
           command
    
    done

    例子:

    #!/bin/bash
    
    int=1
    
    while(( $int<=5 ))
    
    do
    
           echo $int
    
           let "int++"
    
    done

    f)      until循环

    就像do-while和while循环的区别一样

    g)     case

    就像switch。

    格式:

           

    case 值 in
    
           模式1)
    
                  command1
    
                  …
    
                  ;;
    
           模式2)
    
                  command2
    
                  …
    
                  ;;
    
           esac #就像C语言中的default

    h)     break、continue、esac

    七、shell函数

    格式:

          

     [ function ] funname [()]
    
    {
    
               action;
    
               [return int;]
    
    }

                  例子:

                        

     #!/bin/bash
    
    demoFun() {
    
                                echo "$1"
    
                                echo "$2"
    
    }
    
    demoFun 100 110

    八、输入输出重定向

    命令

    说明

    Command > file

    将输出重定向到file

    Command < file

    将输入重定向到file

    Command >> file

    将输出以追加的方式重定向到file

    n > file

    将文件描述符为n的文件重定向到file

    n >> file

    将文件描述符为n的文件以追加的方式重定向到file

    n >& m

    将输出文件m和n合并

    n <& m

    将输入文件m和n合并

    << tag

    将开始标记tag和结束标记tag之间的内容作为输入

    九、Shell文件包含

    格式:

           . filename #注意点号和文件名中间有一空格

           source filename

    实例:

    test1.sh

    #!/bin/bash
    
    url=http://www.runoob.com

    test2.sh

    #!/bin/bash
    
    #通过.号来引用test1.sh文件,这样test1.sh中的东西test2.sh就能用了
    
    . ./test1.sh
    
    echo "$url"
  • 相关阅读:
    学习Android有感!
    使用PHP-Barcode轻松生成条形码(一)
    php利用redis实现分页列表,新增,删除功能
    JS验证input输入框(字母,数字,符号,中文)正则实现
    mac 安装swoole扩展
    git 配置本地SSH秘钥
    lnmp 一键安装
    lnmp php版本升级
    NATAPP内网穿透,本地进行微信开发,支付开发,对象存储回调信息
    微信公众号二维码
  • 原文地址:https://www.cnblogs.com/wuwangchuxin0924/p/9187514.html
Copyright © 2020-2023  润新知