Chinaunix首页 | 论坛 | 博客
  • 博客访问: 388629
  • 博文数量: 166
  • 博客积分: 1972
  • 博客等级: 上尉
  • 技术积分: 1845
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-19 21:16
文章分类

全部博文(166)

文章存档

2013年(7)

2010年(159)

分类:

2010-10-21 19:12:03

 就是说,目前有变量$name,我想取得其值的长度,应该怎么做?

  这样:echo $name | wc -c | read asd

  这样name变量的长度就读到asd变量了,不过会比实际的长度多1

  更有一个更好的方法:echo $name | awk ’{printf("%d",length($1))} | read asd

  #!/bin/sh

  echo -n "Input ID (Ex. : ca0001): "

  read STR

  name=$STR

  echo ""

  echo $name | awk ’{printf("%d",length($1))}’| read length

  echo $length

  while [ "$length" != "6" ]

  do

  echo "Please input ID in correct format!"

  read STR

  name=$STR

  done

  echo "succeed"

  echo $length的结果是什么?

  换一种写法:

  length=`echo $name | awk ’{printf("%d",length($1))}’`

  其中`号为“1”键左边的键

  # name=’Zhang lao san’

  # echo $name | awk ’{printf("%d",length($0))}’ | read asd

  # echo $asd

  13

  #

  #

  #感觉怎么样?

  rain0216:

  按照你的脚本的逻辑,如果首次输入的长度不是6是会死循环的呀。难道没有吗?

  应该将

  echo ""

  echo $name | awk ’{printf("%d",length($1))}’| read length

  echo $length

  放到while循环体里边才是。

  不会啊,循环里面是交互的啊,只要符合条件就能退出循环的

  read name

  asd=`echo $name|awk ’{printf("%d",length($1))}’`

  echo 你刚输的变量长度为$asd

  刚刚加入,请各位多多指教!

  前面的朋友说得没错,会死循环,变量$length应该在循环里面重新赋值!

  各位,能试一下下面的代码:

  read name

  len=`awk -v tname=$name ’BEGIN { print length(tname)}’`

  print "Length is :" len

  asd=`expr length $name`

  echo $asd

  怎么会不是死循环?按你脚本的逻辑,第一次进入循环的是非法串长,在循环体内又没有一条语句来修改这个非法串长就成了死循环,所以还是要将read name

  echo $name |awk ’{printf("%d",length($1))}’ |read ad

  放在循环内。

  哦,是的,当时代码没有没有写完整,而我自己用的是完整的,所以就想当然以为这段也没错了。多谢各位提醒

  ksh中:

  echo ${#$name}

  try this way :

  #env $string |wc
阅读(644) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~