前端运维之Shell基础

780 阅读5分钟

shell基础

  • shell是一个命令行解释器,它为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序

  • 用户可以用shell来启动、挂起、停止或者编写一些程序

  • Shell还是一个功能强大的变成语言

  • Shell是解释执行的脚本语言,在Shell中可以直接调用Linux命令

echo

  • 输出命令

  • -e:表示激活转义字符

echo hello
echo -e "a\tb"

编写执行shell

  • hello.sh

所有shell文件开头都需要#! /bin/bash表示这是一个shell脚本,需要使用/bin/bash去执行这个文件。

#! /bin/bash
echo hello
// 通过bash调用运行脚本
sh hello.sh

// 赋予文件可执行权限 直接运行
chmode 755 hello.sh
chmode u+x hello.sh
./hello.sh

别名

  • 命令可以指定别名,也就是自定义命令快捷方式
  • 使用 alias [快捷方式]=[原始命令]指定,比如alias cp="cp -i"意思就是说指定cp命令为执行cp -i
  • 将快捷方式写入环境变量配置文件vi ~/.bashrc,永久保存命令的快捷方式。
  • source ~/.bashrc 刷新文件执行,执行完之后可以就可以通过快捷方式调用了。
  • 按照$PATH环境变量定义的目录查找顺序执行找到的第一命令
  • 通过unalias [命令快捷方式]可以删除命令别名

命令的生效顺序

按照以下顺序进行匹配命令

  • 绝对路径或者相对路径
  • 别名
  • bash内部命令
  • 按照$PATH环境变量定义的目录查找顺序进行命令查找

命令快捷键

命令含义
ctrl+c强制终止当前命令
ctrl+l清屏
ctrl+a光标移动到命令行首
ctrl+e光标移动到命令行尾
ctrl+u从光标当前位置删除到行首(不包含光标当前位置)

历史命令

  • hisotry [选项] [历史命令保存文件]

  • 选项

    • -c清空历史命令
    • -w把缓存的历史命令写入历史命令保存文件-~/.bash_history
  • 默认保存1000条,可以通过修改vi /etc/profile文件中的HISSIZE=10000进行修改默认保存数量。

调用

  • 使用上下箭头调用以前的历史命令
  • 使用!n重复执行第n条历史命令(n表示history命令中的号)
  • 使用!!重复执行上一条命令
  • 使用!字符重复执行最后一条以该字符串开头的命令开头的命令(类似js中的startsWith,从后往前匹配找到以字符开头的命令进行执行)

输出重定向

标准输入输出

设备设备文件名文件描述符类型
设备设备文件名文件描述符类型
键盘/dev/stdin0标注输入
显示器/dev/stdout1标准输出
显示器/dev/stderr2标准错误输出
类型符号作用
标准输出重定向命令 > 文件以覆盖的方式,将命令的正确输入结果输出到指定的文件或者设备中
标准输出重定向命令 >> 文件以追加的方式,将命令的正确输入结果输出到指定的文件或者设备中
正确输出和错误输出同时保存命令 > 文件 2>&1以覆盖的方式,把正确的输出和错误的输出都保存在同一个文件中 (命令 > 文件表示将命令的执行结果输入到文件中去,正常是可以成功写入的。但是如果出现错误就不能写入了。2表示错误输出,2>&1的意思是说将错误输出先输入到正确输出中去,然后在统一输出,这样就可以成功输出到文件中去了)
正确输出和错误输出同时保存命令 >> 文件 2>&1以追加的方式,把正确的输出和错误的输出都保存在同一个文件中

输入重定向

wc命令的功能为统计指定文件的行数、单词数,字节数,并将统计结果显示输出。

命令<可以作为输出重定向。

比如wc < 1.txt表示将1.txt输入给wc命令执行获得结果。

管道符号

多命令顺序执行

多命令执行符格式含义案例
;命令1;命令2;命令3;表示多命令执行,命令之间没有任何联系echo 1;echo 2;
&&命令1&&命令2&&命令3表示逻辑与,只有第一个命令正确执行才会执行下一个命令echo 1 && echo 2;
||命令1|| 命令2 || 命令3表示逻辑或,当第一个命令错误的时候才会执行下一个命令echo 1 || echo 2;

管道符号

  • 管道符号|前一个命令的输出结果会输入给下一个命令

  • 命令1 | 命令2

ls /etc | more
# 表示将ls \etc的输出内容流给more进行分页查看。

通配符

  • 匹配文件和文件名
通配符作用
?匹配任意一个字符
*匹配0或任意一个字符
[]匹配括号中的任意一个字符
[-]匹配[]中的任意一个字符-代表范围,比如[0-9]代表匹配0-9中任意一个字符
[^]匹配不是中括号中的字符(表示非)

其他符号

符号作用
''单引号,在单引号中的所有的特殊字符,都表示没有特殊含义。普通字符串
""双引号,在双引号中的所有的特殊字符,都表示没有特殊含义。但是$,`,\除外,拥有调用变量值,引用命令和转义的含义
` `反引号,括起来是系统命令
$()和反引号一样
#在shell脚本中#表示注释
$表示调用变量
\转译字符
echo '$PATH' # $PATH
echo "$PATH" # /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin