简单的BASH命令收集

利用/dev/urandom文件创建随机字符

1
tr -dc '=_+/A-Za-z0-9' </dev/urandom | head -c 100

随机数的生成

1
echo $RANDOM

会生成0-32767之间的整数随机数

1
shuf -i 123-456789 -n3

会生成三个123-456789之间的整数随机数

urlencode转换

1
2
3
4
5
6
7
8
9
10
11
12
13
function urlencode() {
local length="${#1}"
for (( i = 0; i < length; i++ )); do
local c="${1:i:1}"
case $c in
[a-zA-Z0-9.~_-])
printf "$c"
;;
*)
printf "$c" | xxd -p -c1 | while read x; do printf "%%%s" "$x"; done
esac
done
}

数组A对数组B和数组C的差集

1
2
3
4
5
6
A=(1 2 3 4 5 6 7 8 9)
B=(1 2)
C=(8 9 10)
ABC=($(echo ${B[*]} ${B[*]} ${C[*]} ${C[*]} ${A[*]}))
X=($(echo ${ABC[*]} | tr ' ' '\n' | sort | uniq -u | tr '\n' ' '))
echo ${X[*]}

注释内容

单行注释
1
2
# echo 1 (行首使用'#')
echo2
多行注释
  • 使用’:’号配合追加输入重定向,冒号在Bash里也是一个命令,表示啥都不做,<<是输入重定向,两个EOF(可用其它特殊成对字符替代)之间的内容通过<<追加给冒号
1
2
3
4
5
:<<EOF
echo "1"
echo "2"
EOF
echo 3
  • 其它方法
1
2
3
4
5
6
7
8
9
10
cat >/dev/null <<EOF
echo "1"
echo "2"
EOF
echo "3"
[ 0 -eq 1 ] && {
echo "1"
echo "2"
}
echo "3"

最大公约数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash
# Usage: 求正整数a,b的最大公约数
# https://www.youtube.com/watch?v=WGO4Tqx5owg

#
a=104
b=40

#
m=$(echo $a $b | tr ' ' '\n' | sort -n | tail -n1)
n=$(echo $a $b | tr ' ' '\n' | sort -n | head -n1)

until [ $n -eq 0 ]; do
y=$((m/n))
n=$((m%n))
m=$(((m-n)/y))
done

echo $a=$((a/m))*$m
echo $b=$((b/m))*$m
echo 最大公约数是$m

给小学生出题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/bin/bash
function jianfa() {
a=$(shuf -i 1-9 -n1) && b=$(shuf -i 1-9 -n1)
m=$(echo $a $b | tr ' ' '\n' | sort -n | tail -n1)
n=$(echo $a $b | tr ' ' '\n' | sort -n | head -n1)
suansi[i]="$m-$n="
ans[i]=$((m-n))
}

function JIAFA() {
m=$(shuf -i 1-9 -n1)
n=$(($(($RANDOM%$((10-m))))+1))
suansi[i]="$m+$n="
ans[i]=$((m+n))
}

function main() {
read -p "这次想挑战多少题目:" num </dev/tty
for ((i=0; i<num; i++)); do
pick=$(shuf -i 1-2 -n1)
[[ $pick == 1 ]] && jianfa || JIAFA
echo ${suansi[i]}
read -p "以上题目的答案是:" inputans </dev/tty
[[ $inputans == ${ans[i]} ]] && echo 答对了,继续加油哟 || i=$((i-1))
done

echo "挑战成功,太棒了!这次已经答对了$i道题目了,休息一下吧!"
}

main

#TODO
#自定义加减法范围
#错误率过高则挑战失败
#错题回顾

🔰本文标题: 简单的BASH命令收集

🔞本文链接: https://193.gs/jiandandeBASHminglingshouji/index.html

🌡️本文总热度