zoukankan      html  css  js  c++  java
  • shell基础

    shell 变量:

    name=”aaa”

    echo $name

    注意事项:

    变量名和等号之间不能有空格

    不能使用标点符号

    不能使用bash里的关键字

    只读变量:

    name=”aaa”

    关键字:readonly name

    删除变量:

    unset name

    变量类型:

    1 局部变量:

    局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量

    2 环境变量:

    所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。

    系统环境变量:

    查看所有环境变量:env

    删除环境变量:unset HAHA

    举个例子:

    PPID:是当前进程的父进程的PID

    PWD:当前工作目录。

    RANDO:随机数变量。每次引用这个变量会得到一个0~32767的随机数。

    查看所有环境变量:env

    删除环境变量:unset

    用vim在/etc/profile文件中添加我们想要的环境变量

    设置新的环境变量 
    export 新环境变量名=内容 
    例:export MYNAME=”aaa”

    生效:source /etc/profile

    shell 字符串

    单引号和双引号的区别:

    单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;

    双引号的优点:

    • 双引号里可以有变量
    • 双引号里可以出现转义字符

    获取字符串的长度:

    str=”abcd”

    echo ${#str}

    提取字符串:

    str=”abcd”

    #表示从字符串第二个字符开始截取 ,取 4个字符

    echo ${str:1:4}

    shell 数组

    定义数组

    arr=(aa bb cc)

    读取数组

    echo ${arr[0]}

    获取数组的长度

    echo ${arr[@]}

    echo ${arr[*]}

    shell 多行注释:

    :<<EOF

          xxxx

             xxxxx

    EOF

    shell 基本运算符

    算数运算符

    + 加法

    - 减法

    * 乘法

    /  除法

    % 取余

    = 赋值

    ==  比较(相等)

    != 不相等

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    [root@localhost ~]# expr 10 + 20
    30
    [root@localhost ~]# echo $((10+30))
    40
    [root@localhost ~]# n=10
    [root@localhost ~]# let n++
    [root@localhost ~]# echo $n
    11
    []和[[]]区别
    [[]]更强大,支持字符串的模式匹配(使用=~操作符时甚至支持shell的正则表达式)
    [root@localhost ~]# sh t.sh
    包含
    [root@localhost ~]# cat t.sh
    #!/bin/bash
    a="xxoo"
    if [[ $a =~ "x" ]]; then
        echo "包含"
    else
        echo "不包含"
    fi

    关系运算符

    关系运算符只支持数字,不支持字符串,除非字符串的值是数字

    -eq  是否相等

    -ne  是否不相等

    -gt  表示大于

    -lt  表示小于

    -ge  大于等于

    -le 小于等于

    布尔运算符

    -o 或运算 两个表达式只要有一个是true 就返回true

    [ $a -lt 20 -o $b -gt 100 ] 返回 true

    -a 与运算 两个表达式都为true才返回true

    [ $a -lt 20 -a $b -gt 100 ] 返回 false

    逻辑运算符

    && 等同于 –a

    || 等同于-o

    if [[ $a –lt $b  && $b –gt 100 ]]; then

          echo “”

    else

          echo “”

    fi

    字符串运算符

    =: 检测两个字符是否相等

    !=: 检测两个字符不相等

    -z : 是否为空

    -n :字符串的长度是否为0

    文件测试运算符

    -b 检测文件是否为块设备

    -d  是否为目录

    -f 是否为普通文件

    -r 是否可读

    -w 是否可写

    -x 是否可执行

    shell echo 命令

    name=”aaa”

    echo –e “$name ”

    -e 开启转义

    换行

    printf

    %s 将参数按字面意思解释为字符串

    printf "%-10s "  aaabbb

    -10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。

    %f 将参数按浮点数打印

    %-4.2 小数点后面保留两位小数 

    左对齐看不出效果

    shell 流程控制

    #!/bin/bash

    a=30

    b=50

    if [ $a == $b ]; then

          echo "a等于b"

    elif [ $a -gt $b ]; then

          echo "a大于b"

    elif [ $a -lt $b ]; then

          echo "a小于b"

    else

          echo "没有符合的条件"

    fi

    #!/bin/bash

    :<<EOF

    for i in {1..100}

    do

          echo $i

    done

    EOF

    for i in `seq 1 100`

    do

          echo $i

    done

    ===========while=======

    #!/bin/bash

    int=0

    while (($int<=5))

    do

            echo $int

            #let "int++"

            let int=int+1

    done

    [root@master ~]# cat while_true.sh

    #!/bin/bash

    :<<EOF

    while :

    do

          echo "xx"

    done

    EOF

    while true

    do

          echo "oo"

    done

    [root@master ~]# cat  until.sh

    #!/bin/bash

    a=0

    until [ $a -gt 10 ]

    do

          echo $a

          a=`expr $a + 1`

    done

    [root@master ~]# cat case.sh

    #!/bin/bash

    echo "输入一个1到4之间的数字"

    echo "你输入的数字为:"

    read num

    case $num in

          1)

          echo "1"

          ;;

          2)

          echo "2"

          ;;

          3)

          echo "3"

          ;;

          *)

          echo "你输入的数字有误!请重新输入"

          ;;

    esac

  • 相关阅读:
    创建windows服务
    Scrum演练(2)
    数据结构链表创建与输出
    C++ XML解析之tinyXML
    解决VS2010启动速度死慢的问题
    标准C++中string类的用法总结
    模版参数编译时检查方法,利用typedef
    static的作用
    数据结构实现链表的反转
    字节对齐
  • 原文地址:https://www.cnblogs.com/xianglei_/p/11957579.html
Copyright © 2011-2022 走看看