使用 jq 在 bash 脚本中,遍历 json 数组

假设有这样的 json 数组,存储于变量 hosts

1
2
3
4
[
{"host": "10.0.0.1", "user": "user1"},
{"host": "10.0.0.2", "user": "user1"}
]

使用下列代码遍历该数组

1
2
3
4
5
6
for row in $(echo "${hosts}" | jq -r '.[] | @base64'); do
_jq() {
echo ${row} | base64 --decode | jq -r ${1}
}
echo $(_jq '.host') $(_jq '.user')
done

在循环体中,可通过 _jq '.host' 等操作,访问 json 值

使用 read 读取用户密码输入(关闭回显)

1
2
echo -n "Password: "
read -s password # -s 关闭回显

k8s 切换命名空间

代码

1
2
3
4
function k8s-switch-ns {
ns="$1"
kubectl config set-context --current --namespace=${ns}
}

使用

1
$ k8s-switch-ns kube-system

k8s 展示所有 pullBackOff 的 image

遍历所有的 POD,列出所有出现 Back-off pulling image 的 image

代码

1
2
3
4
5
6
7
8
9
10
function k8s-list-all-pull-error-images {
lists=($(kubectl get pods --all-namespaces --field-selector=status.phase!=Running | grep ImagePullBackOff | awk '{printf "%s,%s\n", $1,$2}'))

for item in ${lists}; do
ns=$(echo $item | awk -F, '{print $1}')
pod=$(echo $item | awk -F, '{print $2}')
image=$(kubectl describe pod $pod -n $ns | grep "Back-off pulling image" | awk '{print $NF}')
echo $image
done
}

使用

1
$ k8s-list-all-pull-error-images

自签 https 证书

参考

代码

1
2
3
4
5
6
7
8
9
10
11
# generate CA private key
openssl genrsa -des3 -out ca.key 4096 # -des3 need pass phrase

# create ca certificate
openssl req -x509 -new -nodes -key ca.key -sha256 -days 1024 -out ca.crt

## Or generate using one line
openssl req -x509 -new -nodes -keyout ca.key -sha256 -days 1024 -out ca.crt

# generate key for domain
openssl genrsa -out mydomain.com.key 2048

清除 git 历史上的二进制、敏感文件

参考

代码

替换下面代码中的 <file> 为需要删除的文件路径

1
2
3
4
5
6
git filter-branch --prune-empty -d /dev/shm/scratch \
--index-filter "git rm --cached -f --ignore-unmatch <file>" \
--tag-name-filter cat -- --all

git gc --prune=now --aggressive

设置 oh-my-zsh 自动更新频率

参考

代码

~/.zshrc 中,在 source $ZSH/oh-my-zsh.sh 之前添加

1
2
3
4
5
6
7
8
# 关闭自动更新
# zstyle ':omz:update' mode disabled

# 启动自动更新
# zstyle ':omz:update' mode auto

# 每 60 天检查更新
zstyle ':omz:update' frequency 60