zoukankan      html  css  js  c++  java
  • shell笔记2

    1.Linux默认shell是bash,Unix默认shell是sh

       bash完全兼容sh

    2.定义变量

        定义变量时,变量名不加美元符号($),使用变量时才在变量名前加$

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

        变量名可以使用的字符只能是数字、字母和下划线

        首个字符必须为字母

        变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如:${skill}Script

    3.readonly 命令可以将变量定义为只读变量

       unset 命令可以删除变量

    4.

    特殊变量列表
    变量含义
    $0 当前脚本的文件名
    $n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
    $# 传递给脚本或函数的参数个数。
    $* 传递给脚本或函数的所有参数。
    $@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
    $? 上个命令的退出状态,或函数的返回值。
    $$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

    5.shell 变量替换

        echo -e 表示对转义字符进行替换:

    1. a=10
    2. echo -e "Value of a is $a "

        输出:

       Value of a is 10

       命令替换:

          `command`(注意是反引号,不是单引号,这个键位于 Esc 键下方。)

    6.算数运算使用expr

       expr 3 + 2  (表达式和运算符之间要有空格)

       expr 3 - 2

       expr 3 * 2 (乘号前面要加反斜杠)

       expr 3 / 2

       输出为:4

    7.条件表达式

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

       条件表达式语法:

       

    1 if [ $a -lt 100 -a $b -gt 15 ]
    2 then
    3    echo "$a -lt 100 -a $b -gt 15 : returns true"
    4 else
    5    echo "$a -lt 100 -a $b -gt 15 : returns false"
    6 fi

       条件表达式要放在方括号之间,并且要有空格,例如 [$a==$b] 是错误的,必须写成 [ $a == $b ]    

    布尔运算符列表
    运算符说明举例
    ! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。
    -o 或运算,有一个表达式为 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
    -a 与运算,两个表达式都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。

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

    文件测试运算符列表
    操作符说明举例
    -b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
    -c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
    -d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。
    -f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。
    -g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。
    -k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。
    -p file 检测文件是否是具名管道,如果是,则返回 true。 [ -p $file ] 返回 false。
    -u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。
    -r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。
    -w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。
    -x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。
    -s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。
    -e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。

    8.shell字符串

      单引号字符串的限制:

    • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
    • 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。

      双引号的优点:

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

      获取字符串长度:   

    1. string="abcd"
    2. echo ${#string} #输出 4

      提取子字符串:

    1. string="alibaba is a great company"
    2. echo ${string:1:4} #输出liba

      查找字符串:

    1. string="alibaba is a great company"
    2. echo `expr index "$string" is`

    9.数组

       在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。

       定义数组的一般形式为:array_name=(value1 ... valuen)

       读取数组元素值的一般格式是:${array_name[index]}

       获取数组的长度:

    # 取得数组元素的个数
    length=${#array_name[@]}
    # 或者
    length=${#array_name[*]}
    # 取得数组单个元素的长度
    lengthn=${#array_name[n]}

    10.条件判断:case ... esac

    casein
    模式1)
        command1
        command2
        command3
        ;;
    模式2)
        command1
        command2
        command3
        ;;
    *)
        command1
        command2
        command3
        ;;
    esac

    11.for循环语句

    for 变量 in 列表
    do
        command1
        command2
        ...
        commandN
    done

    列表是一组值(数字、字符串等)组成的序列,每个值通过空格分隔

    12.while循环

    while command
    do
       Statement(s) to be executed if command is true
    done

    13.until循环

    until command
    do
       Statement(s) to be not executed until command is true
    done

    command 一般为条件表达式,如果返回值为 false,则继续执行循环体内的语句,否则跳出循环。

    14.跳出循环:break和continue

       break命令允许跳出所有循环(终止执行后面的所有循环)

       continue命令与break命令类似,它不会跳出所有循环,仅仅跳出当前循环。

    15.shell函数

       ①Shell 函数必须先定义后使用。   

       ②调用函数只需要给出函数名,不需要加括号。

       ③函数返回值在调用该函数后通过 $? 来获得

       ④像删除变量一样,删除函数也可以使用 unset 命令,不过要加上 .f 选项

       ⑤如果你希望直接从终端调用函数,可以将函数定义在主目录下的 .profile 文件,这样每次登录后,在命令提示符后面输入函数名字就可以立即调用。

    16.shell输入输出重定向

    全部可用的重定向命令列表
    命令说明
    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 之间的内容作为输入。




  • 相关阅读:
    人类历史上最智慧的169条警世箴言(句句珠玑,发人深省)
    最负责任的回答
    成大事必须依靠的五种人
    一生的伤痕
    有谁愿意陪我一程
    惜缘
    那朵美丽的格桑花,你是否依然绽放?
    今生今世只等你
    成就一生的15条黄金法则
    遇到困难挫折也不要悲观:每个人生来就是冠军(转)
  • 原文地址:https://www.cnblogs.com/whiteprism/p/6513760.html
Copyright © 2011-2022 走看看