酷勤网 – 程序员的那点事!

首页 > 编程资料 > Linux Shell脚本 > 正文

浏览次数:次 2004年01月06日 作者:admirer 字号:

用shell写的rev,以弥补某些没有rev命令的OS之缺憾
请大家测试修正!
#!/bin/sh
#ScriptName:rev
a="$1"
i=0
s=""
l=`expr length "${a}"`
while [ $i -lt $l ]
do
    i=`expr $i + 1`
    s="`expr substr "${a}" $i 1`""${s}"
done
echo "${s}"

如果认为还行的话可以将它命令为rev放入/bin或/usr/bin下,作为系统命令使用
测试
# rev 1234567890
0987654321
# rev "12 34 56 78 90"
09 87 65 43 21
# rev "a b c d e f g h ijk lmn o p q rst uvwxyz"
zyxwvu tsr q p o nml kji h g f e d c b a
# rev "abcdefghijklmnopqrstuvwxyz"
zyxwvutsrqponmlkjihgfedcba

cat a
1234567890
abcdefghij

 while read line
> do
> echo ${line} | xargs rev
> done <a

0987654321
jihgfedcba

说明:
1.当需要反转的串中含有空格时,请用引号括起来。
2.由于是shell写成,在管道中需要用xargs调用,并且不能批处理



 bjgirl 回复于:2003-12-07 23:23:22

弓虽 ;)


 admirer 回复于:2003-12-07 23:50:32

sed 版的,更简单些:
#!/bin/sh 
#ScriptName:rev 
echo "$1"  | sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'

用法和注意事项同上。


 bjgirl 回复于:2003-12-08 00:15:13

来个cut版本的rev~~ ;)

#!/bin/ksh
len=${#1}
while ((len!=0))
do
echo $1|cut -b$len-$len
((len-=1))
done|tr -d '\n';echo

测试:引用:
$rev abcde12345
54321edcba




 網中人 回复于:2003-12-08 01:38:01

我也來段 bash 版的:
#!/bin/bash
IFS=
for ((i=$((${#1}-1));i>=0;i--))
do echo -n ${1:$i:1}; done
echo



 admirer 回复于:2003-12-08 07:16:57

:)
顶一下!


 c1l2d3 回复于:2003-12-08 08:18:26

来一个笨版的:
cat rev
IFS=;
m=$1
k=`expr length $m`
while [ "1" -le "$k" ]
do
s=`echo $m | cut -c$k-$k`
echo $s"\c"
done

rev 1234567890
0987654321


 飞灰橙 回复于:2003-12-08 09:52:46

再弄个偷懒的perl版

#!/usr/bin/perl

print reverse(split("", $ARGV[0]));



 c1l2d3 回复于:2003-12-08 10:04:03

引用:原帖由 "飞灰橙"]
 发表:



楼上飞灰兄:给一个sco下的perl安装,可以吗?多谢


 飞灰橙 回复于:2003-12-08 10:29:53

sry, 偶也没有:(


 bjgirl 回复于:2003-12-08 10:47:53

引用:原帖由 "飞灰橙"]
 发表:


更简单的perl版本的rev
#!perl -w
print reverse@ARGV;



 飞灰橙 回复于:2003-12-08 10:55:23

引用:原帖由 "bjgirl"]更简单的perl版本的rev
 发表:


哈哈,逮到bug罗


 bjgirl 回复于:2003-12-08 10:58:06

引用:原帖由 "飞灰橙" 发表:

哈哈,逮到bug罗


:?:


 飞灰橙 回复于:2003-12-08 11:01:47

rev 1 2 3 4 5
54321

这么写就不行了
rev 12345
12345


 bjgirl 回复于:2003-12-08 14:43:52

引用:原帖由 "飞灰橙" 发表:

哈哈,逮到bug罗


谢谢飞哥哥~~ ;),不好意思~~ :o


 admirer 回复于:2003-12-08 15:11:29

:) 好多哟!
大家加油呀!


 bjgirl 回复于:2003-12-08 15:13:42

来个sed版本的tac! ;)

$cat _tac
#!/bin/ksh
n=$(cat $1|wc -l)
while ((n!=0))
        do
        sed -n ${n}p $1
        ((n-=1))
done



 ohwww 回复于:2003-12-08 20:35:17

学习啊,在这些强人面前我只能学习了


 don 回复于:2003-12-12 02:31:09

能举几个要用到rev的例子吗?


 admirer 回复于:2003-12-12 07:33:17

引用:原帖由 "don"]能举几个要用到rev的例子吗?
 发表:

嗯?前面不是已经列举了不少例子了?


 @龙井茶 回复于:2004-01-06 12:34:57

perl 可以去www.perl.com下载