Linux/MacOS 命令:

  留神,因为有些命令在 Linux 中有 MacOS 没有,网上找到的有时候比拟含糊,所以不肯定完全正确,我尽量辨别不同的。

符号的含意:

符号含意
|管道符
&&代表 and 同时运行多个命令, 应用它。
\容许您在新行中持续编写命令 Bash语法。
*匹配门路下,所有文件或者文件夹名称
<< EOF [重定向文件] ...内容 EOF分界符, EOF 不肯定是 它,只是通常用它作为分界符标识 ; 联合cat进行内容的追加
>获取命令的规范输入并将其重定向到一个文件中(将笼罩整个文件)
2>获取命令的谬误输入并将其重定向到一个文件中(将笼罩整个文件)
&>获取命令的规范和谬误输入并将其重定向到一个文件中(将笼罩整个文件)
<将文件的内容读入命令的输出
>>将文本或命令规范输入追加到文件的最初一行
2>>将文本或命令谬误输入追加到文件的最初一行
&>>将文本或命令规范和谬误输入追加到文件的最初一行

花括号扩大:

在传统的 shell 中是没有 花括号扩大这个性能的.

$ echo a{p,c,d,b}e# 输入后果: ape ace ade abe$ echo {a,b,c}{d,e,f}# 输入后果: ad ae af bd be bf cd ce cf$ ls *.{jpg,jpeg,png}    # 首先扩大为*.jpg *.jpeg *.png,而后解析通配符

  当花括号扩大和变量扩大一起应用时,变量扩大解析于花括号扩大之后。有时有必要应用内置的 eval 函数:

$ start=1; end=10$ echo {$start..$end}  # 因为解析程序,无奈失去想要的后果# 输入后果: {1..10}$ eval echo {$start..$end} # 首先进行变量扩大的解析# 输入后果: 1 2 3 4 5 6 7 8 9 10

bash 中 ``, '', "" 区别:

  首先它们都能够用来解决bash 中字符串中的空格问题。

字符串引号形容
''原样输入字符串,当咱们须要原样输入字符串的时候应用, 例如: a=1; echo '$a' // $a
""参数替换, 例如: a=1; echo "$a" // 1
``命令替换和参数替换, 例如: echo seq 1 10; 次要是为了命令替换, 如果只替换了参数,echo 输入的时候会提醒找不到命令.
echo `seq 1 10`# 输入后果: 1 2 3 4 5 6 7 8 9 10echo seq 1 10# 输入后果: seq 1 10

bash 中的循环:

格局:

    # f 变量名    # * 以后文件夹下的所有文件, 这个是 glob 模式    # 循环输入文件    for f in *; do        ....        # file f    done
    # i 变量名    # `seq 1 10` 1 到 10, seq 1 10 是生成1 到 10,然而这里要加上 ``,否则输入的是 seq 1 10    # 循环输入 i    for i in `seq 1 10`; do        ....        echo $i    done    # 1    # 2    .    .    .    # 10

bash 中的变量:

上面的例子以上面这个变量为例子:

    str="这是一个字符串变量"

变量赋值格局:
    name=value
  Ps:
    1. = 与 name 和 value 之间不能有空格;
    2.变量的值如果有空格,必须用引号蕴含

应用变量格局: $str /// 这是一个字符串变量

在 "" 字符串中应用变量, 获取到变量值: "$str" /// 后果是 这是一个字符串变量
在 '' 字符串中应用变量, 获取到: '$str' /// 后果是 $str

aa=123#定义变量aa的值是123aa="$aa"456#反复定义变量aa的值是源aa的值加上456echo $aa# 输入后果: 123456#aa的值曾经变成了123456aa=${aa}789echo $aa# 输入后果: 123456789# 在进行变量叠加时也能够应用${变量名}格局# 在进行变量叠加时,变量名须要用双引号或 ${} 蕴含

变量查看:

  set 命令能够用来查看零碎中的所有变量(用户自定义变量和环境变量)和设定 Shell 的执行环境
  1.间接set命令列出来所有变量
  2.为了查找变量是否存在应用 grep 命令:
    set | grep -e 正则表达式

变量删除:

unset 命令删除变量:  unset str
因为是删除变量,所以不须要带 $

bash 中的字符串操作:

上面的例子以上面这个变量为例子:

    str=123asd456    

字符串按地位截取:

格局:
  ${var:offset:length}

  • var: 变量,不须要带 $
  • offset: 从字符串第几个开始截取
  • length: 长度
  • 如果只有1个参数,负数的时候,为offset, 正数的时候为 length(这里 : 和 - 要有空格)
~ % str=123asd456~ % echo ${str:2:4}3asd~ % echo ${str:4}  sd456~ % echo ${str:-4}123asd456~ % echo ${str: -4}d456

字符串删除:

pattern是glob格调的正则(名称: glob 模式 \ glob 模式匹配)

  • ${var/pattern} -- 删除首次。删除var示意的字符串中第一次被pattern匹配到的字符串.
  • ${var//pattern} -- 删除全副。删除var示意的字符串中所有被pattern匹配到的字符串.
  • ${var/#pattern} -- 删除行首。删除var示意的字符串中所有以pattern为行首匹配到的字符串.
  • ${var/%pattern} -- 删除行尾。删除var所示意的字符串中所有以pattern为行尾所匹配到的字符串.

字符串切片:

有点像字符串删除(删除行首或行尾)

格局:

  • ${var#pattern} -- 性能:自左而右,查找var变量所存储的字符串中,第一次呈现的pattern,删除pattern所匹配到的所有字符。 留神:匹配到的必须是从行首开始的,不能匹配两头某段.
  • ${var##pattern} -- 贪心模式,匹配到不能再匹配到地位.
  • ${var%pattern} -- 性能:自右而左,查找var变量所存储的字符串中,第一次呈现的pattern,删除pattern所匹配到的所有字符。 留神:匹配到的必须是从行尾开始的,不能匹配两头某段.
  • ${var%%pattern} -- 贪心模式,匹配到不能再匹配到地位.

字符串替换:

pattern是glob格调的正则(名称: glob 模式 \ glob 模式匹配)

格局:

  • ${var/pattern/substr} -- 首次。查找var所示意的字符串中,第一次被pattern所匹配到的字符串,以substr替换之.
  • ${var//pattern/substr} -- 全副。查找var所示意的字符串中,所有能被pattern所匹配到的字符串,以substr替换之.
  • ${var/#pattern/substr} -- 行首。查找var所示意的字符串中,行首被pattern所匹配到的字符串,以substr替换之.
  • ${var/%pattern/substr} -- 行尾。查找var所示意的字符串中,行尾被pattern所匹配到的字符串,以substr替换之.

输入PATH换行:

echo ${PATH//:/\\n}

字符大小写转换:

  • ${var^^} :把var中的所有小写字母转换为大写.
  • ${var,,} :把var中的所有大写字母转换为小写.

变量赋值:

格局:

  • ${var:-VALUE}:如果变量var为空或者未设置,则返回VALUE;否则返回变量var的值。留神,变量name自身的值不会被批改.
  • ${var:=VALUE}:如果变量var为空或者未设置,则返回VALUE,并将VALUE赋值给变量var;否则返回变量var的值.
  • ${var:+VALUE}:如果变量为空或者未设置,那么不会返回任何值。否则返回VALUE的值。留神,变量name自身的值不会被批改.
  • ${var:?ERROR_INFO}:如果变量var为空或者未设置,则返回错误信息ERROR_INFO;否则返回变量var的值.

命令:

compgen:

  列出所有命令

参数形容
-c列出所有可用的命令
-a列出可用的所有bash shell别名
-b显示所有bash内置插件
-k显示所有bash关键字
-A显示所有bash函数

alias:

   alias命令用来设置指令的别名。咱们能够应用该命令能够将一些较长的命令进行简化。应用alias时,用户必须应用单引号''将原来的命令引起来,避免特殊字符导致谬误。
  alias命令的作用只局限于该次登入的操作。若要每次登入都可能应用这些命令别名,则可将相应的alias命令寄存到bash的初始化文件/etc/bashrc
  执行 alias 或者 alias -p, 能够显示本人设定的 alias 命令列表(有些shell 没有 -p 参数,间接执行 alias)

seq:

  疾速生成数字列表,seq 仅实用数字.

    # 除非另有指定,否则 `seq` 始终以 1 结尾    echo `seq 3`    # 1 2 3        echo `seq 3 6`    # 3 4 5 6
  1. 指定增量

       # 3 开始的数   # 4 指定增量   # 20 最大的数,因为19 增量 4 后是大于 20,所以最初输入20   echo `seq 3 4 20`   # 3 7 11 15 19
  2. 指定减量
   # 20 开始的数   # -4 指定减量   # 3 最小的数,因为4 减量 4 后是小于 3,所以最初输入3   echo `seq 20 -4 3`   # 20 16 12 8 4
  1. 应用分隔符 -s参数 加上分隔符

{a..b}:

  a是开始,b是完结; 疾速生成序列,实用于任何字符(中文也适宜).

运算:

bc:

  bc 命令是任意精度计算器语言,通常在linux下当计算器用。
  它相似根本的计算器, 应用这个计算器能够做根本的数学运算

    • 加法
    • 减法
    • 乘法
  • / 除法
  • ^ 指数
  • % 余数
# scale 设置小数位,通过 / 1 进行echo 'scale=2; (2.777 - 1.4704)/1' | bc# 后果: 1.30, floor
let:

  用于执行一个或多个表达式,变量计算中不须要加上 $ 来示意变量。如果表达式中蕴含了空格或其余特殊字符,则必须引起来
格局:

let arg [arg ...]

例如:

a=1 b=2let a=a+4 b++echo $a $b # 后果: 5 3

目录:

cat:

  cat命令连贯文件并打印到规范输出设备上,cat常常用来显示文件的内容
格局:

cat 文件1 [...文件n]
参数性能
-n或-number有1开始对所有输入的行数编号
-b或--number-nonblank和-n类似,只不过对于空白行不编号
-s或--squeeze-blank当遇到有间断两行以上的空白行,就代换为一行的空白行
-A显示不可打印字符,行尾显示“$”
tac:

  cat命令的反向,只反向从下到上,不反向左右.

more:

  用来查看一个文件的内容。当文件内容太多,一屏幕不能占下,而你用cat必定是看不后面的内容的,那么应用more就能够解决这个问题了。当看完一屏后按空格键持续看下一屏。但看完所有内容后就会退出。如果你想提前退出,只需按q键即可

less:
  •   作用跟more一样,但比more好在能够上翻,下翻。空格键同样能够翻页,而按”j”键能够向下挪动(按一下就向下挪动一行),按”k”键向上挪动。
  •   在应用more和less查看某个文件时,你能够按一下”/” 键,而后输出一个word回车,这样就能够查找这个word了。如果是多个该word能够按”n”键显示下一个。
  •   另外你也能够不按”/”而是按”?”后边同样跟word来搜寻这个word,惟一不同的是,”/”是在以后行向下搜寻,而”?”是在以后行向上搜寻
head:

  head后间接跟文件名,则显示文件的前十行。如果加 –n 选项则显示文件前n行

tail:

  前面间接跟文件名,则显示文件最初十行。如果加-n 选项则显示文件最初n行。

cd:

  切换目录
格局:
  cd 目录门路

  • 返回上一次所在的目录:  cd - 或者 cd $OLDPWD
  • 切换到主目录:   cd ~
touch:

  创立文件
格局:
  touch 文件名

mv:

  挪动或者重命名

cp:

  复制

mkdir:

  新建文件夹

rmdir:

  删除文件夹

rm:

  删除文件夹或者文件

file:

  查看文件类型

ls:

  列出门路上面的文件夹和文件

参数简写性能
--all-a所有文件夹和文件(包含暗藏的文件夹和文件,默认不显示暗藏的文件夹和文件)
-1竖立输入文件夹和文件名称
-l文件夹或者文件的长清单
other:

显示当前目录残缺门路:  pwd
查看装置目录门路:  which 软件名等