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
指定增量# 3 开始的数
# 4 指定增量
# 20 最大的数,因为19 增量 4 后是大于 20,所以最后输出20
echo `seq 3 4 20`
# 3 7 11 15 19
指定减量
# 20 开始的数
# -4 指定减量
# 3 最小的数,因为4 减量 4 后是小于 3,所以最后输出3
echo `seq 20 -4 3`
# 20 16 12 8 4
使用分隔符 -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 软件名等