• shell scripts 编写基础


    一、shell变量的相关用法:

    变量作为被赋值的一方的时候不加$,只有在使用其值的内容的时候需要加上$,该符号可

    1,变量中的单引号‘’、双引号“”“、反单引号‵`、括号()、大括号{}、双括号(())的用法区别

    $变量 和 ${变量} 用法相同,建议使用 $变量 这种形式。获取变量的值

    变量内容如果没有空格,不要引号;如果有空格,单引号将特殊字符如$解释为一般字符,双引号将发挥$解析变量含义的作用

    将特殊字符变成一般字符

    如果需要其他命令提供的信息,可以使用`命令`或者$(命令);建议使用``这种形式

    变量内容累加时候,可以采用var=$var"累加内容"或者var=${var}累加内容  两种形式;建议使用var=$var"累加内容"这种形式

    两个变量的累加,var3=$var1"$var2"即可

    $(())代表进行数值运算 ,当然也可以用 declare -i total=$num1*$num2

    2,变量的显示和设置:echo,unset

    env显示系统环境变量,local显示语系变量

    变量键盘读取:read,声明:declare(默认总是字符串类型);read还可一读取管道流的数据

    ls /bin | while read line;do echo $line;done

    更容易理解的方式是:

    file_list=`ls in`

    for file_name in $file_list

    do

      cat file_name

    done

    3,变量内容删除、替换

    ${变量#关键字} 从前删除最短

    ${变量##关键字} 从前删除最长

    ${变量%关键字}从后删除最短

    ${变量%%关键字}从后删除最长

    ${变量/旧字符串/新字符串}从前替换第一个

    ${变量//旧字符串/新字符串}替换所有

    这就可以解决自己的一个问题:如何获得上一级目录

    例如$root_dir=/var/spool/mail

    那么获取上级目录可以使用:$root_dir=${root_dir%/*}

    如果仅仅得到文件名,可以使用$root_dir=${root_dir##/*/}

    其实利用$root_dir=`dirname $root_dir`;root_dir=`basename $root_dir`貌似也可以

    4,变量测试:

    var=${str-expr}

    var=${str:-expr}

    var=${str:+expr}

    等等,详见p316,

    不过这类测试也可以用shell script中的if  test或者[]判断语句  then语句来实现,只不过这种方法相对简单

    其他测试功能:test

    可以测试文件、目录是否存在;测试文件权限,比较两个整数大小,字符串判断等,也可以进行多重条件判断

    和test类型的判断,当然也可以使用[]来进行

    二、shell命令中的通配符和正则表达式的区别

    注意通配符和正则表达式是不同的

    通配符和相关的shell命令结合使用(如ls ),而正则表达式则是用在字符串处理中(有些管道命令也支持正则表达式),以行为单位处理字符产

    *匹配0个或者多个,在正则中表示重复前面0次或者多次

    ?匹配一个,在正则中代表0次或者一次重复前面,在正则中‘.’代表一个任意字符

    []选择范围,同正则

    [^]反向选择,同正则

    注意.就代表小数点,没有正则里面.*代表0-无穷多个任何字符的概念

    如果某个命令支持正则表达式,那么就可以利用正则表达式来处理字符串,例如vi,grep,sed,awk等

    如果命令不支持正则表达式,那么就只能使用bash的通配符,如cp,ls,cd等

    shell中支持正则的命令是以行为基础的匹配,而通配符则是逐个位置的严格匹配。

    三、数据流重定向

    标准输出:>(覆盖),>>(追加)

    标准错误输出:2>

    标准输入<

    结束输入<<    例如:cat > catfile<<'eof'

    tee 双向重定向

    四、命令执行控制&& ||

    cmd1 && cmd2 :1正确则执行2;1错误不执行2

    cmd1 || cmd2:1错误执行2,1正确不执行2

    cmd1&&cmd2||cmd3 :1正确,执行2,否则执行3

    五、管道命令

    |  :该符号的左侧为标准输出,有则需要是能够接收标准输入的命令

    能够产生标准输出的命令:如ls,cat等

    能够接受标准输入的命令:cut,grep,sort,wc,uniq,tr,col,join,expand,split ,(这些命令不结合管道|使用的时候,参数多为文件)sed,awk,xargs(处理不支持管道命令的情况)

    ————————————————————————————————————————————————————————

    几种语言的单引号,双引号,字符串连接

    shell脚本中:

    单引号和双引号都可一表示字符串,单引号中的没有特殊含义,双引号中变量会被解释

    如果是字符串和字符串之间的连接,直接书写就可以

    如果是变量和字符串之间的链接

    var3=$var2“i am var3”

    不能写成var3=$var2 i am var3

    在python脚本中

    单引号和双引号都可以表示字符串,没有什么区别,只是为了方便混合使用

    如果想要不被转义,表单本身的含义,可以在字符串前面加上r

     字符串之间的连接,不论是字符串与字符串还是变量和字符串,一律采用+

  • 相关阅读:
    mysql 8 nodejs连不上
    render与vue组件和注册
    0424 前端笔记
    0423
    任务
    使用async await 封装 axios
    [Java] Spring 3.0 01/02/03/04/05 -自设源代码
    [Java] Spring3.0 360百科介绍
    [Java] Spring3.0
    [Java] Spring3.0 面向抽象(接口)编程
  • 原文地址:https://www.cnblogs.com/bobodeboke/p/3356614.html
Copyright © 2020-2023  润新知