CentOS 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 的值。
最后通过本例中的方法来分别获得需要的参数。
实验结束,欢迎批评指正,交流心得……