window/Linux/MacOS 命令行

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 10

echo 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的值是123
aa="$aa"456
#重复定义变量aa的值是源aa的值加上456
echo $aa
# 输出结果: 123456
#aa的值已经变成了123456
aa=${aa}789
echo $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=2
let 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 软件名等

你可能感兴趣的