[i=s] 本帖最后由 crossbitter 于 2011-9-18 14:50 编辑 [/i]
shift语句
bash和tcsh都支持shift命令.shift将存放在位置变量中的命令行参数,依次向左传递.例如位置变量当前值
为:
$1=file1 $2=file2 $3=file3
执行一次shift命令后,位置变量的值为:
$1=file2 $2=file3
//到这还能看懂, 就是右边2的值传递给1,3的值传递给2.这个好像跟C不
一样,按照C的规则,应该是1,2的值都是file3了。
还可以在shift命令中指定位置变量转移的次数, 如:
shift n
例子:
while [ "$1"]
do
if [ "$1"="-i"] then
infile=" $2"
//写在这是指定哪个位置的变量转移两次。
shift 2
else if [ "$1"="-o"] then
outfile="$2"
//这条语句的下边哪还有变量。。。难道是循环?这个2,到底什么意思
shift 2
else
echo "Program $0 does not recognize option $1"
fi
done
tr a-z A-Z<$infile>$outfile
orlandozx 于 2011-09-19 13:52:44发表:
{:3_117:}顶起来~
gwssgc 于 2011-09-19 10:17:05发表:
[i=s] 本帖最后由 gwssgc 于 2011-9-19 11:08 编辑 [/i]
同感!小马虎害死人啊!
个人感觉 shiftX
就是舍弃X个参数,shift 2 就是舍弃前面2个参数。不过实在是不知道这个shift 会用在哪里。
crossbitter 于 2011-09-18 17:30:08发表:
[i=s] 本帖最后由 crossbitter 于 2011-9-18 19:49 编辑 [/i]
:0wszxc问题解决了,注意各种符号之间的空格 就OK了。谢版主
crossbitter 于 2011-09-18 17:10:13发表:
[i=s] 本帖最后由 crossbitter 于 2011-9-18 17:21 编辑 [/i]
悲剧啊,直接复制就能运行。。
shift.sh: line 3: until[ -z 1]: command not found
shift.sh: line 4: syntax error near unexpected token `do'
shift.sh: line 4: `do'
crossbitter 于 2011-09-18 16:57:47发表:
[i=s] 本帖最后由 crossbitter 于 2011-9-18 17:01 编辑 [/i]
大体的意思我明白了,但是上边的第一个程序一直是这种模样。 第二个程序很不错啊,一目了然
shift.sh: line 3: [-z: command not found
shift.sh: line 3: [-z: command not found
shift.sh: line 3: [-z: command not found
shift.sh: line 3: [-z: command not found
程序是这样的吧。。直接从虚拟机复制出来的
#!/bin/bash
until [-z "$1"]
do
echo "$@"
shift
done
相思爱文 于 2011-09-18 15:56:23发表:
[i=s] 本帖最后由 相思爱文 于 2011-9-18 16:16 编辑 [/i]
shift 2就是把命令中的左边两个参数删除了。比如原来是
sh shift.sh a b c d e f g
当运行完shift 2 后,等于变成了
sh shift.sh c d e f g
再运行一次shift 2,就变成了
sh shift.sh e f g
……
不是把某一个变量改变了,是整体左移。
用下面的脚本看着明显些
#!/bin/bash
until [ -z "$1" ]
do
echo '$@'= "$@ "
echo '$1=' $1
echo '$2=' $2
echo '$3=' $3
echo '$4=' $4
echo '$5=' $5
shift 1
echo shift
done
如果保存成shift.sh,就运行sh shift.sh 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j
相思爱文 于 2011-09-18 15:49:17发表:
[i=s] 本帖最后由 相思爱文 于 2011-9-18 16:05 编辑 [/i]
试下这个脚本
#!/bin/bash
until [ -z "$1" ]
do
echo "$@ "
shift 2
done
把脚本命名为shift.sh
运行sh shift.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
再把脚本中的shift 2 改成别的数字再试试,看结果
shift是移动位置,不要理解成传递值。相当于把左面的1个或多个参数给去掉了。
shift可以用来向左移动位置参数。
Shell的名字 $0
第一个参数 $1
第二个参数 $2
第n个参数 $n
所有参数 $@ 或 $*
参数个数 $#
shift默认是shift 1
crossbitter 于 2011-09-18 15:14:08发表:
0:w(5(不能沉