1. 无符号整数,不考虑翻转后超出范围的情况,你需要将这个整数中每位上的数字进行反转。
输入:123 输出321
输入:45678 输出87654
思路
先用${#var}求出字符串长度,再利用循环结构+获取子串${var:0-n:1}从后往前遍历每个单个字符的子串,最后使用字符串拼接把一个个子串拼接在一起;脚本如下
Shell脚本
#!/bin/bash
read -p "请输入一个无符号整数>>>" n
len=${#n}
for ((i=1;i<=$len;i++))
do
var="$var${n:0-i:1}"
done
echo $var
运行结果
2. 从终端输入字符串,求出小写字母的个数,大写字母的个数,数字的个数。
Shell脚本
#!/bin/bash
read -p "请输入字符串>>>" str
len=${#str}
lower=0
upper=0
number=0
export LC_ALL=C
for ((i=0;i<$len;i++))
do
case ${str:i:1} in
[a-z])
((lower++))
;;
[A-Z])
((upper++))
;;
[0-9])
((number++))
;;
esac
done
echo -e "小写字母$lower个\n大写字母$upper个\n数字$number个"
运行结果
3. 要求输入年月日,输出这是今年的第几天 ---->选做
Shell脚本
#!/bin/bash
read -p "请输入年月日(格式如2022 7 15)>>>" year mon day
arr=(31 29 31 30 31 30 31 31 30 31 30 31)
brr=(31 28 31 30 31 30 31 31 30 31 30 31)
sum=0
if [ $(($year%4)) -eq 0 -a $(($year%100)) -ne 0 ] || [ $(($year%400)) -eq 0 ]
then
for ((i=0;i<$((mon-1));i++))
do
((sum+=${arr[i]}))
done
echo "$(($sum+$day))"
else
for ((i=0;i<$((mon-1));i++))
do
((sum+=${brr[i]}))
done
echo "$year-$mon-$day是这一年的第$(($sum+$day))天"
fi