前言:
此篇为如何用shell脚本来达到从键盘输入字符串可倒序输出的效果。不借用rev命令实现。
方法一:
#!/bin/bash
#by Anasta in 1.0-2018.5.3
#使用read读入一段字符串,最后以倒序的方式打印出这一段字符串
echo "\033[47mQuit program when input is empty.\033[0m" # 前面的“\033[47m”和后面的“\033[0m”为一组,设置文字背景为灰色
while :
do
read -p "Please input a string: " str
if [ "$str" = "" ];then # 当什么都不输的时候则退出程序
echo "bye~"
exit
fi
len=${#str} # 获得输入的字符长度
res= # 清空字符串变量
for((i=$len;i>=0;i--))
do
res=$res${str:$i:1} # 利用字符切片从后往前一次取出一个字符并连接
done
echo "$res"
done
方法一是利用字符切片从后往前依次取出一个字符并组合成一新的字符串。最后直接输出这个新的字符串就好。
方法二:
#!/bin/bash
#by Anasta in 2.0-2018.5.3
#使用read读入一段字符串,最后以倒序的方式打印出这一段字符串
echo -e "\033[47mPlease enter 'q' to exit the program.\033[0m"
while :
do
read -p "Please input a string: " var
if [ "$var" = "" ];then
echo "bye~"
exit
fi
str=`echo $var |sed 's/./& /g'` # 利用sed将字符串中间都添加空格,然后再返回给变量str
array=($str) # 将str所包含的内容赋给数组array,因为字符串中有空格,则自动将单个字符作为元数组成数组
count=${#array[@]} # 获取数组的个数
for ((i=$count;i>=0;i--)) # 利用for循环从后往前依次遍历数组则达到倒序输出字符串的效果
do
echo -n ${array[$i]}
done
echo
done
方法二是利用了数组来遍历,根据此题环境,我们不能直接把字符串扔给数组让它自动分割每个字符将其变为元数。所以我们要先利用sed将每个字符后都加空格,如“apple”变为了“a p p l e”,再讲此字符串丢给数组,数组根据空格进行分割,将其变为元数。最后利用for循环从后往前遍历就达到倒序输出字符串的效果了。
(责任编辑:IT) |