Shell笔记1

作者: yaya_pangdun | 来源:发表于2016-06-06 21:29 被阅读28次

    Linux 就会依据 /etc/passwd 文件的配置给我们一个 shell

    1. 基础

    Shell文件以.sh为后缀,
    $ chmod +x test.sh,
    $ ./test.sh

    #!/bin/bash
    
    echo "What is your name?"
    read PERSON
    echo "Hello, $PERSON"
    

    2. 变量

    定义变量的时候无需用美元符$,使用变量时要加上$。

    your_name="xujiguang"
    echo $your_name
    echo ${your_name} ->可选,但是原因。。。
    

    变量重新赋值

    myUrl="http://see.xidian.edu.cn/cpp/linux/"
    echo ${myUrl}
    #无需美元符
    myUrl="http://see.xidian.edu.cn/cpp/shell/"
    echo ${myUrl}
    

    只读变量

    myUrl="http://see.xidian.edu.cn/cpp/shell/"
    readonly myUrl
    

    删除变量

    unset myUrl  -->不能删除只读变量
    

    Shell特殊变量

    如果传递的参数有空格必须用""包围字符串


    Shell特殊变量

    $@和$*的区别

    #./test.shell "china is a big contry"
    
    a = 10
    echo -e "Value of a is $a \\n"  ->-e代表对转义字符进行替换,默认为-E不转义
    

    3. 命令替换

    #Shell可以先执行命令,将结果暂存
    `command`
    
    now_date = `date`
    echo $now_date
    USERS=`who | wc -l`
    echo "Logged in user are $USERS"
    

    4. 变量替换

    Shell变量替换

    5. 运算符

    #!/bin/bash
    
    val=`expr 2 + 2` 
    echo "Total value : $val"
    

    输出结果

    Total value : 4
    

    三点注意:

    • 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
    • 完整的表达式要被 \\\ 包含,注意这个字符不是常用的单引号,在 Esc 键下边。
    • 乘法需要反斜杠转义 val=\$a \\\\* $b

    6. 条件语句

    if [ $a == $b ]
    then
      echo "a is equal to b"
    fi
    
    • 注意点,条件表达式要放在[]之间,而且[$a==$b]是错误的写法,必须写成[ $a == $b ]

    7. 关系运算符

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

    a=10
    b=20
    if [ $a -eq $b ]
    then
      echo "$a -eq $b : a is equal to b"
    else
      echo "$a -eq $b : a is not equal to b"
    fi
    

    其他

    运算符 说明 举例
    -ne 检测两个数是否相等,不相等返回true [ $a -eq $b ]
    -gt 检测左边的数是否大于右边的数 [ $a -gt $b ]
    -lt 检测左边的数是否小于右边的数 [ $a -lt $b ]
    -ge 检测左边的数是否大于等于右边的数 [ $a -ge $b ]
    -le 检测左边的数是否小于等于右边的数 [$a -le $b ]

    布尔运算符
    a=10
    b=20

    运算符 说明 举例
    ! 非运算 [ !false]
    -o 或运算 [ $a -lt 20 -o $b -gt 100 ] 返回true
    -a 与运算 [ $a -lt 20 -a $b -gt 100 ] 返回 false

    字符串运算符
    a="abc"
    b="bcd"

    运算符 说明 举例
    = 检测字符串是否相等 [ $a = $b ] 返回false
    != 检测字符串是否不相等 [ $a != $b ] 返回true
    -z 检测字符串长度是否为0 [ -z $a ] 返回false
    -n 检测字符串长度是否不为0 [ -n $a ] 返回true
    str 检测字符串是否为空 [ $a ]返回true

    8.文件测试运算符

    file = "/var/www/test.sh"
    
    运算符 说明 举例
    -r 文件是否可读 可读返回true
    -w 文件是否可写 可写返回true
    -x 文件是否可执行 可执行返回true
    -d 是否是目录 是目录返回true
    -s 文件大小是否为0 文件大小为0,返回true
    -e 文件是否存在 存在返回true
    -f 检测是否是普通文件(不是目录也不是设备文件) 普通文件返回true

    9. 字符串

    • 双引号中可以有变量
    • 双引号中可以有转移字符

    获取字符串长度

    string = "abcd"
    echo ${#string}
    

    提取子串

    string="alibaba is a greate company"
    echo ${string:1:4} #输出liba [1:4]
    

    查找子字符串

    string="alibaba is a greate company"
    echo `expr index "$string" is`
    

    字符串

    不知道是什么

    变量配置方式 说明
    ${变量#关键词} 如果变量从头开始数据符合[关键词],则将符合的最短的删除
    ${变量##关键词} 如果变量从头开始数据符合[关键词],则将符合的最长的删除
    ${变量%关键词} 如果变量内容从尾向前的数据符合[关键词],则将符合最短的删除
    ${变量%%关键词} 如果变量内容从尾向前的数据符合[关键词],则将符合最长的删除
    ${变量/旧字符串/新字符串} 若变量内容符合[旧字符串]则[第一个旧字符串会被新字符串取代]
    ${变量//旧字符串/新字符串} 若变量内容符合[旧字符串]则[全部旧字符串会被新字符串取代]

    相关文章

      网友评论

        本文标题:Shell笔记1

        本文链接:https://www.haomeiwen.com/subject/jwhxrttx.html