猫猫速查 Bash!

shebang

e.g.

1
#!/bin/bash

#! 开头,告知OS执行的程序

Conditional

1
2
3
4
5
6
7
8
if xxxx;
then
xxx
elif xxx;
xxxx
else
xxx
fi

Tip: 注意 [ ] 内的空格

  • 字符串相等

    1
    2
    3
    4
    if [[ "neko" = "$1" ]];
    then
    echo "$2"
    fi
  • 文件存在

    1
    2
    3
    4
    if [[ ! -f "FILEPATH" ]];
    then
    echo "Meow!"
    fi
  • 数字相等

    1
    2
    3
    4
    if [[ $# -eq 2 ]];
    then
    echo "Meow!"
    fi
  • 表达式

    1
    2
    3
    4
    if ! grep "neko" "$FILEPATH";
    then
    echo "Big neko!"
    fi

loop

  • loop one line with spaces:

    1
    2
    3
    4
    for i in "$@";
    do
    echo "$i"
    done
  • loop text with lines:

    1
    2
    3
    4
    while IFS= read -r i;
    do
    echo "$i"
    done <<< "$@"

Arguments

  • 取所有的 arguments

    1
    $@

    遍历所有的 arguments

    1
    2
    3
    4
    for i in "$@";
    do
    echo "$i"
    done
  • 取知道位置的 argument (第一个即为 $1

    1
    $1 $2
  • 取 arguments 数量

    1
    $#

Variable

  • 从一个表达式 declare

    1
    NAME=$(grep "neko" "$FILEPATH")
  • 取 variable 使用

    1
    grep "${NEKO}meow" "$FILEPATH"

Calculate

  • decimal

    1
    echo "2" | awk '{print $1/5}'

    Tip: 如果需要管道前的结果,awk 后一定要是单引号,才能用 $1 取到

Align

  • 使用 printf (just like C++)

    1
    echo | awk "{print 2/10*100}" | xargs printf "%8.2f"

    Tip:

    xargs take standard input

    “%8.2f” 意味着 保留两位小数,右对齐,前面保留8字符,上面的结果就是 6空格+20.00

String Process

  • sed

    -E 开启正则扩展

    -i 修改原文件

    • 替换

      1
      sed -E -i "s/neko/catus/" $FILEPATH

      before: I am a neko.

      after: I am a catus.

    • 删除

      1
      sed -E -i "/dog/d" $FILEPATH

      before: Sweet dog

      after: [此行已消失]

  • cut

    取固定列

    1
    2
    3
    cut -d" " -f1 $DATA
    # cut $DATA with space as a deliminator
    # take the first feild
  • grep (猫在 Windows 查找具体的文本常用 ripgrep,比起 grep 快不少喵,强烈安利)

    查找

    -E 开启正则扩展

    1
    grep "neko" "$FILEPATH"

Others

  • wc

    -l 取行数

    -w 词语数

  • tail 和 head 这种常用的不行的就不用讲了8(

  • 重定向:>> 是补充在文件最后,> 是重写

  • sort 看名字就知道8

  • uniq 也是看名字就知道8

一般用软链接就够了喵

1
ln -s target source

猫学了3天写到想自鲨才弄成就是说,幸好咱正则也不生疏就是说(

Author: Alendia

Permalink: https://alendia.dev/2022/03/24/bash-quick-reference/

文章默认使用 CC BY-NC-SA 4.0 协议进行许可,使用时请注意遵守协议。

Comments

Unable to load Disqus, please make sure your network can access.