命令

gpg

  • gnu privacy guard

重定向

  • heredoc

    • eg:

      1
      2
      3
      4
      5
      
      sudo tee /etc/docker/daemon.json <<-'EOF'
      {
        "registry-mirrors": ["https://o8npla25.mirror.aliyuncs.com"]
      }
      EOF

使用 XDG_HOME 存放 .bashrc

参考:

把下面的内容存放到 /etc/profile.d/bash_xdg.sh 中:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# Make bash follow the XDG_CONFIG_HOME specification
_confdir=${XDG_CONFIG_HOME:-$HOME/.config}/bash
_datadir=${XDG_DATA_HOME:-$HOME/.local/share}/bash

# Source settings file
if [ -d "$_confdir" ]; then
    for f in bash_profile .bashrc ; do
        [ -f "$_confdir/$f" ] && . "$_confdir/$f"
    done
fi

# Change the location of the history file by setting the environment variable
[ ! -d "$_datadir" ] && mkdir -p "$_datadir"
HISTFILE="$_datadir/history"

unset _confdir
unset _datadir

string 字符串

基本语法

连接字符串

实现:连着写即可

  • 不需要特殊操作
1
"good"" day"

单引号和双引号区别

  • 单引号 禁止执行脚本
  • 双引号 可以执行命令

单行 执行循环

单行 for

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# * 多行模式,没有
for VARIABLE in file1 file2 file3
do
    command1 on $VARIABLE
    command2
    commandN
done

# * 单行模式
for i in {1..5}; do COMMAND-HERE; done

for((i=1;i<=10;i+=2)); do echo "Welcome $i times"; done
  • 格式

    • for ...; do ...; done

单行 while

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# * 多行模式
while true; do      # 使用分号“;” 分割
touch pic-`date +%s`.jpg
sleep 300
done

i="0"

while [ $i -lt 4 ]   # 直接换行,不需要额外符号
do
xterm &
i=$[$i+1]
done


# * 单行模式
while true; do foo; sleep 2; done  # * 全部使用分号“;”分割
  • 格式

    • while ...; do ..; ...; done
    • 注意

      • 这里使用的是分号 ";" 不是冒号 ":"

变量默认值

参考: bash - ${var:=default} vs ${var:-default} - what is difference? - Stack Overflow

两种格式: ":-" 和 ":="

区别:

  1. :-

    • 使用值,但是不会复制给对应变量
  2. :=

    • 使用值,并且复制给对应变量
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
> A=''
> echo "${A:=2}"
2
> echo "$A"
2
> A=''
> echo "${A:-2}"
2
> echo "$A"
(empty)

创建临时目录或文件

命令: mktmp

例子:

  1. 进入临时目录

    1
    
    cd $(mktemp -d)

检测命令是否存在