记录

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

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

随机数的生成

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

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

urlencode转换

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的差集

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[*]}

注释内容

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

最大公约数

#!/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

给小学生出题

#!/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
#自定义加减法范围
#错误率过高则挑战失败
#错题回顾

标签: none

添加新评论