shell
数字大小比较
整数比较
1
2
3
4
5
6
|
#!/bin/bash
if [ $1 -gt $2 ];then
echo "参数$1大于参数$2"
else
echo "参数$1小于参数$2"
fi
|
数字判断一些命令:
- -gt:大于
- -lt:小于
- -eq:等于
- -ne:不等于
- -ge:大于等于
- -le:小于等于
小数与整数之间的比较
1
2
3
4
|
a=1.6
b=6.1
c=`echo "$a > $b" | bc`
# 如果双引号内执行结果为真,c的值就是1,否则c的值就是0.
|
可以使用的比较符号:
< > == >= <=
字符串比较
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
a="1"
b="2"
if [[ "$a" == "$b" ]]; then
echo "Strings are equal."
else
echo "Strings are not equal."
fi
[[ "string1" == "string2" ]] && echo "Equal" || echo "Not equal"
# 判断字符串是否为空
if [[ -z $a ]]; then
echo "String is empty."
fi
# 正则表达式
if [[ $a =~ .*Linux.* ]]; then
echo "It's there."
fi
# 匹配*
if [[ $a == *"Linux"* ]]; then
echo "It's there."
fi
|
在文件指定行后面加一列
1
2
3
4
5
6
7
8
9
10
|
# 例如需要在.ansible.cfg中添加deprecation_warnings = False的配置
if [ -f "$HOME/.ansible.cfg" ];then
cp "$HOME/.ansible.cfg" "$HOME/.ansible.cfg.bak"
set +e # why:grep 没有的时候,返回码不是0,需要忽略这个错误
deprecation_warnings=$(cat "$HOME/.ansible.cfg"|grep "deprecation_warnings = False"|wc -l)
set -e
if [ $deprecation_warnings -eq 0 ];then
sed -i '/defaults]/a\\deprecation_warnings = False' $HOME/.ansible.cfg
fi
fi
|
grep 反向过滤
1
2
|
# 过滤掉包含abc的行
cat a.log|grep -v "abc"
|
去除字符串的前后空格
1
2
3
4
5
|
echo " A B C " | awk '$1=$1'
# 这个方法是0的时候,就没有输出,要注意
echo ' A B C ' | awk '{sub(/^ */, "");sub(/ *$/, "")}1'
echo ' A B C ' | sed -e 's/^[ ]*//g' | sed -e 's/[ ]*$//g'
eval echo " A B C "
|
为什么'$1=$1'
有问题Changing Fields (The GNU Awk User’s Guide)Assignment Ops (The GNU Awk User’s Guide)Why does awk behave differently for $1 if the value is 0 (number zero)? - Unix & Linux Stack Exchange
将$1
赋值给$1
的时候,awk会通过将通过默认OFS(默认为空格)连接字符串重新计算$0
'$1=$1'
是一个赋值操作,如果是0的话,这个表达式为false,所以不会执行print
vim中文乱码
将下述内容放到$HOME/.vimrc
中
1
2
3
4
|
syntax on
set fileencodings=utf-8,gb2312,gb18030,gbk,ucs-bom,cp936,latin1
set enc=utf8
set fencs=utf8,gbk,gb2312,gb18030
|
使用指令修复json
如果json因为修改失败,多了逗号,可以使用如下指令
1
|
yq eval -o json test.json |tee test.json
|
生成随机字符串
1
2
3
4
|
head -c 32 /dev/random | base64 # 会阻塞
head -c 32 /dev/urandom | base64 # 不会阻塞
openssl rand -hex 10
echo $RANDOM # 得到的这个随机数是介于 0~32767 之间的一个整数
|
查看操作系统信息
1
2
3
|
uname -a
cat /etc/os-release
cat /proc/cpuinfo #cup信息
|
crontab日志
1
|
sudo tail -f -n 200 /var/log/syslog|grep CRON
|
ansible
ansible取其他主机的变量
1
2
|
# 使用ansible中的A主机的B变量,通常用于目标主机并不存在于A的hosts中的情况
"{{hostvars[groups['A'][0]]['B']}}"
|
ansible按照shell结果选择执行分支
使用command
将结果注册为变量,判断变量的状态Return Values — Ansible Documentation
1
2
3
4
5
6
7
8
9
10
11
12
|
- name: exec
hosts: A
tasks:
- name: Ensure a exit
command: curl http://{{inventory_hostname}}:8080/healthz
register: healthz
failed_when: False
- name: exec run
shell: |
docker run
when: healthz.rc != 0
|
git
删除远程仓库文件,不删除本地文件
1
2
3
|
git rm -r --cached 文件/文件夹名称
git commit -m "提交说明"
git push origin master
|
kubectl
手动运行一个cronjob
1
|
kubectl create job --from=cronjob/<name of cronjob> <name of job>
|