Linux Shell 实用命令及使用场景
Linux Shell 实用命令/系统文件及使用场景
COMMAND
-
set
在shell中的常用组合: -
-x
: 用于调试(debug);-
-u
: 如果遇到不存在的变量,Bash 默认忽略它。 使用-u
选项来避免这种情况。 即遇到未定义的变量。 则异常退出脚本. 等价于set -o nounset
命令;
其他写法:
-e
: 脚本只要发生错误,就终止执行。set -e
有一个例外情况,就是不适用于管道命令。等价于set -o errexit
命令;-o pipefail
:用于解决-e
选项无法处理管道命令错误的问题,只要一个子命令失败,整个管道命令就失败,脚本就会终止执行。
-
使用场景:
一般shell脚本将以下内容放置到前几行:
#!/usr/bin/env bash
和#!/bin/bash
区别
前者无需在意所运行的解释器在何处(bash), 只要存在于你的
$PATH
环境变量中即可, 根据你的环境寻找并运行默认的版本,具有灵活性.
command -v <COMMAND>
: 用于验证某个命令是否存在。 不存在则返回一个非零值.
使用场景:
shell脚本中判断一个命令是否存在且可执行。 可以使用以下命令:
exec > SOMEFILE
: 将脚本输出内容全部输出到指定文件中(除非单独指定)
使用场景:
-
exec
: exec 是 bash 的内置命令, 不启用新的shell进程。就像source
或者.
一样, 使用bash
或者sh
执行命令时, 会另起一个子shell, 子shell会继承父shell的环境变量, 子shell执行完毕之后不影响父shell. -
trap
: 捕获信号, 通常用途是在shell脚本被中断时完成清理工作
信号名称 信号数 描述 SIGINT 2 程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl+C)时发出。 SIGQUIT 3 和SIGINT类似, 但由QUIT字符(通常是Ctrl /)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号。 SIGFPE 8 在发生致命的算术运算错误时发出. 不仅包括浮点运算错误, 还包括溢出及除数为0等其它所有的算术的错误。 SIGKILL 9 用来立即结束程序的运行. 本信号不能被阻塞, 处理和忽略。 SIGALRM 14 时钟定时信号, 计算的是实际的时间或时钟时间. alarm函数使用该信号。 SIGTERM 使用场景:
- 脚本退出前执行命令
脚本在执行时按下
CTRL+c
时,将显示”program exit…”并退出(CTRL+c
的信号是SIGINT)
- 忽略信号
例:脚本运行时忽略
SIGINT
SIGQUIT
SIGFPE
等信号
read
:获取用户输入
选项:
-t
:输入超时;-p
:添加提示语;-s
:不回显输入,用于密码输入;使用场景:
select
: 获取选项
使用场景:
cat >&1 <<-EOF
: 用于打印多行信息(多用于脚本使用信息)
使用场景:
- 简单端口探测:
使用场景:
服务依赖性探测,当所依赖的服务正常启动之后,再启动我们的程序
SYSTEM FILES
/etc/os-release
:查看系统名称、版本、基于版本、版本代号、帮助信息、系统官方主页等;
使用场景:
对不同的系统使用不同的命令进行处理:
字符串截取
#
截取右边的字符串:
%
截取左边的字符串:
格式 | 说明 |
---|---|
${string: start :length } | 从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。 |
${string: start} | 从 string 字符串的左边第 start 个字符开始截取,直到最后。 |
${string: 0-start :length } | 从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符。 |
${string: 0-start} | 从 string 字符串的右边第 start 个字符开始截取,直到最后。 |
${string#*chars} | 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。 |
${string##*chars} | 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。 |
${string%*chars} | 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。 |
${string%%*chars} | 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。 |
参考链接
文章内容收集于网络,个人整理使用。