zoukankan      html  css  js  c++  java
  • linux shell学习笔记

    一  变量

    声明变量: my_var='ddd'
    使用变量: ${my_var}
    设置为只读变量: readonly my_var
    删除变量: unset my_var 注意只读变量不能被删除

    变量类型:(3类)
      1) 局部变量:局部变量在脚本或命令中定义,仅在当前 shell 实例中有效,其他 shell 启动的程序不能访问局部变量。
      2) 环境变量:所有的程序,包括 shell 启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候 shell 脚本也可以定义环境变量。
      3) shell变量:shell 变量是由 shell 程序设置的特殊变量。shell 变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了 shell 的正常运行。

    二  字符串

    字符串:单引号 或 双引号

    字符串拼接:在新的字符串中直接拼接
    字符串长度:${#my_var}
    截取子字符串:${my_var:0:2}
    查找字符: echo ·expr index "$my_var" d· (注:是反引号,不是单引号!!!)

    三  数组

    shell数组:只有一维,没有多维。不限定数组的大小。下标元素从0开始。
    定义数组:数组名=(值1 值2 ... 值n) (注:也可以单独定义:array[0]=val0)
    读取数组:${数组名[下标]}
    数组长度:legnth=${#array_name[@]} 或 legnth=${#array_name[*]}
    数组元素长度:legnth=${#array_name[n]}

    四  shell 注释

    单行:以#号开头
    多行:没有多行注释。可以采取变通的方式达到目的;{} —— 定义函数的形式。

    五  传递参数:$# (其中$0是执行的文件名)

    参数处理 说明
    $# 传递到脚本的参数个数
    $* 以一个单字符串显示所有向脚本传递的参数。
    如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
    $$ 脚本运行的当前进程 ID 号
    $! 后台运行的最后一个进程的 ID 号
    $@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。
    如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
    $- 显示 Shell 使用的当前选项,与 set 命令功能相同。
    $? 显示最后命令的退出状态。0 表示没有错误,其他任何值表明有错误。

    注:如果参数个数超过10,加花括弧 ${10} 。

    六  运算符

    1. 算数运算符

    比较两个数字是否相等用 == 。注意:条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。
    a=10
    b=20
    val=`expr $a + $b`
    echo "a + b : $val"
    2.关系运算符
    关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
    shell关系运算符不像其他编程语言,支持> < = ,它是采用字符表示的。如下:
    运算符 说明 举例
    -eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 false。
    -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。
    3.布尔运算符
    ! 非 [ ! false ] 返回 true。
    -o 或 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
    -a 与 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
    4.逻辑运算符
    && 短路与
    || 短路或
    5.字符串运算符
    下表列出了常用的字符串运算符,假定变量 a 为 "abc",变量 b 为 "efg":
    运算符 说明 举例
    = 检测两个字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
    != 检测两个字符串是否相等,不相等返回 true。 [ $a != $b ] 返回 true。
    -z 检测字符串长度是否为 0,为 0 返回 true。 [ -z $a ] 返回 false。
    -n 检测字符串长度是否为 0,不为 0 返回 true。 [ -n $a ] 返回 true。
    str 检测字符串是否为空,不为空返回 true。 [ $a ] 返回 true。
    ============================
    注意:比较两个数字是否相等采用两个等号 == ,比价字符串是否相等使用一个等号 = 。
    ============================
    6.文件测试运算符可以对文件属性进行测试。

    七  输入输出

    1.等待输入[和用户交互],回显 (read命令)
    read name
    echo "${name} is just a test!"
    2. 将结果输出到文件中
    echo "it is just a test" > out.txt
    结果会在当前目录下自动创建一个out.txt的文件,里面存储的是控制台的输出内容。
    重定向命令列表如下:
    命令 说明
    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 之间的内容作为输入。
    3.原样输出字符,不进行任何转义的技巧:使用单引号

    八  流程控制

    1.选择
    ① if condition
    then
    command1
    command2
    fi
    ② if condition1
    then
    command1
    elif condition2
    then
    command2
    else
    commandN
    fi
    ========================================================
    注意:if else 语句经常与 test 命令结合使用。如:
    num1=$[2*3]
    num2=$[1+5]
    if test $[num1] -eq $[num2]
    then
    echo '两个数字相等!'
    else
    echo '两个数字不相等!'
    fi
    ========================================================
    ③ case —— 对应其他语言中的switch语句
    case 值 in
    模式 1)
    command1
    command2
    ...
    commandN
    ;;
    模式 2)
    command1
    command2
    ...
    commandN
    ;;
    esac
    注意:;;表示break的含义
    2.循环
    ① for循环
    for var in item1 item2 ... itemN
    do
    command1
    command2
    ...
    commandN
    done
    ② while
    while condition
    do
    command
    done
    ③ util循环 —— 对应其他语言中的do...while语句至少执行一次循环。
    until condition
    do
    command
    done

    九  函数

    定义:demoFunc(){echo "shell函数"}
    调用:demoFunc

    十  时间日期处理

    echo `date`
    echo `date +"%F %R:%S"` —— 输出当前日期和时间
    更多日期时间处理方式可以查看 date --help


  • 相关阅读:
    【Mybatis源码解析】- JDBC连接数据库的原理和操作
    【JDK源码解析】- ArrayList源码解析,绝对详细
    【设计模式】-代理模式及动态代理详解
    【Java基础】反射机制及应用
    Go 中的 channel 与 Java BlockingQueue 的本质区别
    Github Actions 还能做这些事
    写了一个 gorm 乐观锁插件
    Go 去找个对象吧
    Web 自动化测试全面提升之 Pytest
    【51testing专访】web自动化,从入门到进阶
  • 原文地址:https://www.cnblogs.com/helloIT/p/5804779.html
Copyright © 2011-2022 走看看