Linux Shell实验 遍历参数

编写一个简单的shell脚本,包含以下内容:

a) 有输入参数
b) 包含if-then语句
c) 包含循环(for/while/until)
d) 包含简单的运算
e) 包含文件的读或写

1、创建待输出的txt文件

[root@yang ~]# touch ./add.txt

2、创建并编辑一个脚本文件

[root@yang ~]# vim ./test12.sh

./test12.sh 是我创建的shell文件名

  1 #!/bin/bash
  2 index=1
  3 for arg in  $*
  4 do
  5 echo "第 $index个参数 : $arg"
  6 if [ $arg -gt 0 ]
  7         then
  8         echo " $arg 为正数 "
  9 elif [ $arg -lt 0 ]
 10         then
 11         echo " $arg 为负数 "
 12 elif [ $arg -eq 0 ]
 13         then
 14         echo " $arg 为零 "
 15 else
 16          echo " $arg 输入非法! "
 17          exit
 18 fi
 19 let index+=1
 20 if [ $index -ge 3 ]
 21         then
 22         break
 23 fi
 24 done
 25 echo "$1+$2=$(($1+$2))" >> $3

注释:
用户输入格式:2add 加数1 加数 2 追加输出文件路径

15 else
16 echo " $arg 输入非法! "
17 exit

在得到用户输入非法的参数后,直接退出(不再运算、不再写入文件),给出错误信息提示。

20 if [ $index -ge 3 ]
21 then
22 break

由于本次实验第三个参数参数是文件地址,所以就不再判断其整数类型

3、添加别名

[root@yang ~]# vim ~/.bashrc

进入vim编辑见面

  1 # .bashrc
  2
  3 # User specific aliases and functions
  4
  5 alias rm='rm -i'
  6 alias cp='cp -i'
  7 alias mv='mv -i'
  8 alias cls='clear'
  9 alias haha='shutdown -h now'
 10 alias hah='shutdown -r now'
 11 alias 2add='./test12.sh'
 12 # Source global definitions
 13 if [ -f /etc/bashrc ]; then
 14         . /etc/bashrc
 15 fi

添加第11行代码即可

 11 alias 2add='./test12.sh'

别名需要重新登录才可以使用,所以先切换到另一个用户,然后在切换回来(su默认切换到root用户)

[root@yang ~]# su linux0216
[linux0216@yang root]$ su
密码:
[root@yang ~]#

4、测试

进行三次正确参数运算

[root@yang ~]# 2add -1 3 ./add.txt
第 1个参数 : -1
 -1 为负数
第 2个参数 : 3
 3 为正数
[root@yang ~]# 2add 0 2 ./add.txt
第 1个参数 : 0
 0 为零
第 2个参数 : 2
 2 为正数
[root@yang ~]# 2add -6 72 ./add.txt
第 1个参数 : -6
 -6 为负数
第 2个参数 : 72
 72 为正数
[root@yang ~]#

查看一下输出的文件

[root@yang ~]# tail -3 ./add.txt
-1+3=2
0+2=2
-6+72=66
[root@yang ~]#

测试输入错误的参数

[root@yang ~]# 2add -6 haha ./add.txt
第 1个参数 : -6
 -6 为负数
第 2个参数 : haha
./test12.sh: line 6: [: haha: integer expression expected
./test12.sh: line 9: [: haha: integer expression expected
./test12.sh: line 12: [: haha: integer expression expected
 haha 输入非法!
[root@yang ~]#

提示输入非法,再查看下是否追加写到了输出文件中

[root@yang ~]# tail -3 ./add.txt
-1+3=2
0+2=2
-6+72=66
[root@yang ~]#

并没有输出

5、讨论

本次实验在体验上并不是特别好,仅在完成实验要求和掌握这种遍历参数的方法,如果没有
20 if [ $index -ge 3 ]
21 then
22 break
这种遍历方法会把包括文件路径在内的参数3也进行循环,判断其是整数类型。

关于遍历输入参数,我们知道 $0 $1 $2 $3 可以分别表示参数0 参数1 参数2 参数3 (本实验中对应为 ./test12.sh -1 3 ./add.txt ),所以可以用 $i 来表示不同的参数吗?经过大量尝试我没有成功
因为如果 i 表示整数变量,那么 $i 表示 i 的值。

最后通过本例中的方法来分别获得需要的参数。

实验结束,欢迎批评指正,交流心得……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值