Skip to content

Shell 常用命令 #10

@xv-jiaqi

Description

@xv-jiaqi

[TOC]

命令操作符

在 shell 中,多个命令之间的连接符有下面几种:

  • ;
    命令依次连续执行
  • ()
    优先符操作,(cmd_x1 && cmd_x2) || (cmd_x3 && cmd_x4) 这条命令在 cmd_x1 失败后 cmd_2 不会执行,但是 cmd_x3 && cmd_4 依旧会执行,在没有优先符的情况下则后面的都不会执行
  • &&
    命令遇到错误停止执行,即前一条命令的退出状态是 0 则继续执行下一条的命令
  • &
    命令在后台执行,使用方法是在命令后跟一个空格加 &
  • ||
    命令成功执行则停止,如果前一条命令退出状态是 1 则执行下一条命令
  • !
    命令结果取非操作,比如删除当前目录下除 HTML 外的其他文件 rm -r !(*.html)
  • |
    管道操作符,第一个命令的输出作为下一个命令的输入,比如 ll | > .log
  • {}
    合并操作符号,比如 [ -f /home/xyz.txt ] || touch /home/xyz.txt; echo "The file does not exist" 最后的 echo 命令始终输出,合并命令即可 [ -f /home/xyz.txt ] || {touch /home/xyz.txt; echo "The file does not exist"}
  • \
    连接符,命令太长时用于换行

区别

常用脚本工具的区别:

  • sed - when you need to do simple text transforms on files.
  • awk - when you only need simple formatting and summarization or transformation of data.
  • perl - for almost any task, but especially when the task needs complex regular expressions.
  • python - for the same tasks that you could use Perl for.

命令

echo

-e 标记表示解释所有的转义序列 (如 \n 为换行)。

$ echo -e "以下为登录到系统中的用户\n\n $(who)"

> 以下为登录到系统中的用户
>
> xujiaqi  console  Dec 24 17:21 

定义变量

变量名=$(命令)
变量名=$(命令 [命令选项 ...] 参数1 参数2 ...)
或者:
变量名=`命令`
变量名=`命令 [命令选项 ...] 参数1 参数2 ...`

创建数组

langArr=(js ts py go c cpp java sql swift)

遍历数组数组

for lang in ${langArr[@]}
do
  echo $lang
done

判断值是否在数组中

# 方法不唯一
echo "${langArr[@]}" | grep -wq "targetVal" &&  echo "Yes" || echo "No"

场景

大小写转换

echo 'hello' | tr 'a-z' 'A-Z'
echo 'HELLO' | tr 'A-Z' 'a-z'

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions