shell学习总结

一、上一节是正则表达式,课程在B站上:马哥正则表达式,王晓春讲师。

视频地址:https://www.bilibili.com/video/av33607890

二、bash写的shell脚本
 

第一节P1

  1.     第一行必须加上: #!/bin/bash路径,保证以后执行权限。是指此脚本使用/bin/bash来解释执行,#!是特殊的表示符,其后面根的是此解释此脚本的shell的路径。
  2. shell脚本中命令错误不会影响执行,语法错误是会影响执行,能够直观的看到。
  3. 检测脚本中的语法错误: bash -n /path/to/some_script, 只能检查语法错误,检查不出来命令不存在的问题。
    跟踪调试脚本的执行: bash -x /patch./to/some_script
  4. 变量: $PATH  加上$ 符号的变量。代表二进制数字,代表数据的地址。,变量是个用户用的,0101010是个计算机用的。
    可以自定义变量比如: dhh="123", echo $dhh 就可以显示出来。重新赋值的时候会在换一个块地址空间,原来的数据会自动被回收。
    加引号是比较严谨的写法。如果是写的命令,如: name= `hostname`, 加特殊的转义符。
    echo "$name" 保留与原来的格式,如多行的情况。
    变量也可以用两外的变量赋值:但是要加上$name符号。
    变量也可能是数值,整形, 字符等。i=100, 实际是将i当成了一个字符串。
    强类型,与弱类型, bash是弱类型,不能使用保留字,if, for等type if可以查看。见名知义, 驼峰法:student_name或者studentName。
    echo && 表示当前bash进程的PID编号。PPID:表示父进程的编号。父子关系: pstree -p (如果未安装yum install psmisc)
    变量的种类:
            局部变量:在当前session会话中有效,新窗口无效, 开启新的bash程序,和上一个bash是父子关系, 也不能查看其它bash中定义的变量。上下级不会相互影响各自变量的定义。
           全局变量: 必须使用关键字echo $name,  export name(export name="qin")就可以将普通变量声明为全局变量。可以传递,可以修改,但是改完后不能回传,父可以传给子进程,但是不能回传.export直接显示目前环境中的环境变量。declare -x也是一种声明环境变量的方式。env:显示所有环境变量(系统自带的和自己定义的都可以显示)。
            删除自定义环境变量:unset name(需要手动释放内存)
            set: 显示所有的变量。
       
           

第二节P2

  1. 小括号特性(), 独立于外部的进程的变量,仅仅在小括号中间有效,一次性使用不影响外面的进程的变量
  2. 位置变量:命令后面跟不同的参数,实现不同的功能。用与让脚本在脚本代码中调用通过命令行传递给他的参数
    参数:$1 $2 $3表示对应的第几个参数,${10}表示第十个参数,10以上的参数需要用大括号括起来。
    $* :表示所有的参数是一个整体的输入。对于在一个脚本中调用另一个脚本传入的传参数,要使用:
    $@,也表示所有的参数,但是表示是独立的输入(两者只有在被双引号括起来的时候才有区别)
    $# 传递给脚本的参数的个数,
    $0: 表示命令本省
    set   ---清空所有的位置变量
  3. 重要: 每个文件的开头都要有 #!/bin/bash
  4. 变量声明:
    export name=Value
    declare -x name=Value
  5. 变量引用: $name, ${name}
  6. 声明只读变量“:
    readonly name,    declare -r name
    查看只读变量: readonly -p 
  7. ls |wc -l 统计文件夹下的文件个数
  8. cat /etc/centos-release 查看内核版本
    cat /etc/centos-release
    CentOS Linux release 7.4.1708 (Core)
     

第三节P3

  1. $0显示的是脚本的名称(软链接的名字)
  2. 多个参数个数:每次只去$1, 然后后面参数往前移动,就是shift操作:整体从后往左移动。 每操作一次,参数向左移动一次。也可以一次移动两位,shift 2
  3. 根据退出状态来报告成功或者而失败, 只有0表示成功1-255都是失败
    $? 变量保存最近的命令退出状态,前一次的执行的状态(
    如果是系统变量脚本中执行的,是最有一次执行的结果, 如果是语法错误,则是整个脚本的返回结果)
  4. ping -c1 172.168.0.123 &> /dev/null可以通过echo $?查看该命令执行的结果,如果是0 就表示执行成功了。
  5. exit(num), 执行结束后返回的值。在终端中执行,退出当前的bash进程
  6. bash中的算数运算 help let(查看帮助)
    id++, id--      variable post-increment, post-decrement
            ++id, --id      variable pre-increment, pre-decrement
            -, +            unary minus, plus
            !, ~            logical and bitwise negation
            **              exponentiation
            *, /, %         multiplication, division, remainder
            +, -            addition, subtraction
            <<, >>          left and right bitwise shifts
            <=, >=, <, >    comparison
            ==, !=          equality, inequality
            &               bitwise AND
            ^               bitwise XOR
            |               bitwise OR
            &&              logical AND
            ||              logical OR
            expr ? expr : expr
                            conditional operator
            =, *=, /=, %=,
            +=, -=, <<=, >>=,
            &=, ^=, |=      assignment

    直接相加模式是默认是当做字符串的
    使用方式:let z=x+y
    var =$[算术表达式]
    var =$((算术表达式))
    var = $(expr arg1 arg2 arg3)
    declare -i var = 数值,将变量声明为数字  
    echo `算术表达式` | bc
    乘号需要转移\*
    bash有内建的随机数生成器$RANDOM(0-32767)
    ex: echo $[$RANDOM%50] 取0-49之间的随机数。 
     
  7. COLOR=$[RANDOM%7+31] ;echo -e "\e[1;${COLOR}mcolor\e[0m"
    随机打印其中颜色中的一种。
  8. XOR异或:互斥的原则,相同为0 ,不同为1, 按位异或。
    可以用来进行值的互换a=a^b, b=a^b, a=a^b ,则a和b的值就能互换。
  9. bash -x test.sh单步执行文件,看打印调试信息

第四节P4

一、条件测试:

  1. help test 查看使用帮助

  2. 判断某需求是否满足,需要由测试机制来实现,专用的测试表达式需要由测试命令辅助完成测试过程

  3. 测试命令:
    test expersion表达式,判断某需求是否满足,由测试机机制来实现,是内置的命令
    用法举例: test $str1 = $str2,真返回0, 假返回1.

  4. 方法2:  [$str1 = $str2] 注意等号前后一定要有空格

  5. 方法2  [[expresion表达式]], 这里用的是两个中括号。一般用到正则表达式的时候用两个中括号。

  6. 参数说明:
    -v VAR :变狼VAR是否设置
    -gt 是否大于
    -ge 是否大于等于
    -eq 是否等于
    -ne 是否不等于
    -lt 是否小于
    -le 是否小于等于
    -z判断存的变量是否为零,-n非零判断   或者[ $var ]  直接判断var是否是非空。有值则返回0, 表示为真。

  7. 短路或 || 与短路于&&的用法,以及三目运算符的用法,用之前思考一下就可以。

  8. 如果是用来判断数字是否相等的[ $m -eq $n ]中间加上-eq来进行比较, 直接使用等号= 比较的是字符串。

  9. 变量在[ “$a“ = ”$b”']使用的使用将变量用双引号引起来, 记住是双引号,不是单引号。

  10. 字符串测试
     = 是否等于
    > < !=不等于
    -z "string" 字符串是否为空, 为空则为真,不为空,则为假
    -n "string" 字符串是否不为空,不为空则为真,为空则为假。
    注意:用于字符串比较时候的用到的操作数都应该使用双引号。

  11. =~左侧的字符是否能够被右侧的正则表达式PATTERN所匹配。 
    [[ "$n" =~ ^[[:digit:]]+$ ]] && echo digit || echo no digit

  12.  test 语句支持判断文件的操作,help test查看具体的用法

  13. fale || { echo cmd1; echo cmd2}  或者false || (echo cmd2; echo cmd2)
    {} 与()区别,小括号会再开一个子进程,不会退出当前的进程,{不开启子进程,退出当前进程}
    所有脚本中尽量用{ 大括号 },大括号前后要有空格。

第五节P5

一、条件测试

  1. echo -e "stting \c" 取消换行

二、文件测试

  1. -a File 同 -e,
  2. -e File , 文件存在行测试,存在为真,不存在为假
  3. -b File 是否存在且为块设备的文件
  4. -c File 是否存在且为字符设备文件
  5. -d File 是否存在且为目录文件
  6. -f File 是否存在且为普通文件
  7. -h File 或者-L File 存在且为符号链接文件
  8. -p File 是否存在且为命名管道文件
  9. -S File 是否存在且为套接字文件
  10. -s File 是否存在且为空
  11. -t fd fd文件描述符是否在某终端已经打开
  12. -N File  文件自从上一次被读取之后是否被修改过
  13. -O File 当前有效用户是否为文件属主
  14. -G File 当前有效用户是否为文件属组
  15. 双目测试
    File1 -ef File2   File1是否是File2的硬链接
    File1 -nt File2 File1是否新于File2
    File1 -ot File2 File1s是否旧于File2

 

三、 read命令用来接受输入

  1. 使用read来把输入值分配给一个或者多个shell变量
  2. read,对变量复制  read $var1
  3. read -p 指定要显示的提示,不换行输入
  4. -s 静默输入,一般用于密码的输入
  5. -n n指定输入字符的长度,到这个长度,输入自动结束
  6. -d ‘a’ 输入结束符,碰到a字符就结束输入
  7. -t Time,  Time为超时等待时间S
  8. read从标准输入中读取值,给每个单词分配一个变量,把剩余的单词都分配给最后一个变量中

四、总结

  1. 变量: 局部变量和环境变量, 位置变量$、set、 unset 、declear (-i -r -s等参数)
  2. 常用命令

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值