zoukankan      html  css  js  c++  java
  • Shell基础

    通常不区分sh和bash,#!/bin/sh同样也可以改为 #!/bin/bash

    #! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序

    echo 命令用于向窗口输出文本

    执行shell脚本的两种方法:

      1.作为可执行程序 

        chomd +x ./test.sh #使脚本具有执行权限

        ./test.sh #执行脚本,注意加上./,告诉系统在当前目录查找,否则系统会去PATH路径查找

      2、作为解释器参数

        直接运行解释器,其参数就是 shell 脚本的文件名,/bin/sh test.sh

    shell变量:

      my_name="amm"

      使用定义过的变量,在变量名前加上$  echo ${my_name}

      使用 readonly 命令可以将变量定义为只读变量  readonly my_name

      unset删除变量

      对于字符串,单引号忽略包含的变量名,按字面输出,双引号可以有变量和转义符  str="hello, my name is "$my_name"! "

      获取字符串长度  echo ${#my_name}

      提取子串  echo ${my_name:1:4}

      截取字符串  ${my_name#*/},从左边开始删除第一个/的左边,保留右边,##表示删除所有/的左边,%和%%相反,从右边开始,删除右边

      数组,shell只支持一维数组  array_name=(value0 value1 value2 value3)

      可以单独定义数组的各个分量  array[0]=1

      获取数组元素  ${array[0]}

      获取数组元素个数  len=${#array[@]}或者len=${#array[*]}

      获取数组所有元素  ${#array[@]}或者len=${#array[*]}

      获取数组单个元素长度  len=${#array[0]}

    shell参数:

      $0:执行的文件名

      $1:运行脚本时传递的第一个参数

      $#:传递给脚本的参数个数

      $*:以一个字符串显示所有向脚本传递的参数,如果$*被双引号抱起来,则显示的字符串也有双引号

      $$:脚本运行的当前进程ID号

      $!:后台运行的最后一个进行的ID号

      $@:与$*类似,但按多个字符串显示参数

      $-:显示shell使用的当前选项,与set命令功能相同

      $?:显示最后命令的退出状态,0表示没有错误,其他都表示有错误

    shell运算符:

      原生bash不支持简单的数学运算,可以用其他命令实现,例如awk和expr,expr最常用

      expr时一款表达式计算工具,用来完成表达式求值操作

      val=`expr 2 + 2` #val为4,注意使用的是反引号`,表达式和运算符之间要有空格

      变量运算:`expr $a + $b`  `expr [$a == $b]` #返回布尔值,条件表达式要放在方括号之间,且有空格

      特殊:*乘号前必须要加转义

      关系运算符只支持数字,不支持字符串,除非字符串的值是数字,运算符前后也得有空格

      -eq 是否相等 equal

      -ne 是否不相等 not equal

      -gt 是否左边大于右边 greater than

      -lt 是否左边小于右边 less than

      -ge 是否左边大于等于右边 greater than or equal

      -le是否左边小于等于右边 less than or equal

      !非运算

      -o或运算

      -a与运算

      &&逻辑与

      ||逻辑或

      -z检测字符串长度是否为0,0则true

      -n检测字符串长度是否不为0,不位0则true

      str检测字符串是否为空,不空则true

      -b检测文件是否是块设备文件

      -c检测文胸是否是字符设备文件

      -d检测文件是否是目录

      -f检测文件是否是普通文件(既不是目录,也不是设备文件)

      -g检测文件是否设置了SGID位

      -k检测文件是否设置了粘着位(Sticky Bit)

      -p检测文件是否有名管道

      -u检测文件是否设置了SUID位

      -r检测文件是否可读

      -w检测文件是否可写

      -x检测文件是否可执行

      -s检测文件是否为空(文件大小是否大于0)

      -e检测文件(包括目录)是否存在

    shell函数

      定义格式:functionname(){...}

      返回值,有return情况为return返回的,没有则为函数最后一条命令运行结果

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

      通过$n得形式获取参数,n大于9时要用{n},functionname 1 2 3

    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 之间的内容作为输入

    shell文件包含

      通过. filename或者source filename形式引入外部文件

      被包含的文件不需要执行权限

    其他命令

    set去追踪一段代码的显示情况,执行后在整个脚本有效

    set -x 开启 

    set +x关闭

    set -o 查看

    sh -x 调试脚本

    cp file1 file2

    如果file2不存在,就先创建 file2 ,然后把 file1 内容复制到 file2 中

    如果 file2 存在,把把 file1 的内容覆盖 file2 的内容

    cp -i file1 file2

    参数 -i 可以提示是否覆盖 file2

    参数 -n 让复制命令不覆盖 file2 的内容

    参数 -r 递归复制

    sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

    sed -i 's/book/books/g' file

    -i表示直接编辑文件,s是替换指定字符,g表示行内全面替换,把file文件中每一行的第一个book替换为books

    tar打包命令

    -c 建立压缩命令

    -x 建立解压命令

    -t 查看

  • 相关阅读:
    火狐插件火狐黑客插件将Firefox变成黑客工具的七个插件
    memcache安装环境:WINDOWS 7
    PHP正则表达式
    968. 监控二叉树 力扣(困难) dfs 官方说DP
    375. 猜数字大小 II 力扣(中等) 区间动态规划、记忆化搜索
    629. K个逆序对数组 力扣(困难) 区间动态规划
    剑指 Offer 51. 数组中的逆序对 力扣(困难) 巧用归并排序算法
    488. 祖玛游戏 力扣(困难) dfs
    16. 最接近的三数之和 力扣(中等) 双指针
    319. 灯泡开关 力扣(中等) 数论
  • 原文地址:https://www.cnblogs.com/zawjdbb/p/8494470.html
Copyright © 2011-2022 走看看