做实验要写shell脚本,本以为照着PDF指导书敲就完事了,结果敲出来的代码永远运行不了,上网查了才知道shell脚本有那么多规则
一.shell脚本文件一律以 .sh结尾,执行shell脚本test.sh有3个方法:
1 sh test.sh 或bash test.sh(因为bash完全兼容sh)
当脚本文件没有可执行权限,或脚本文件开头没有指定解释器时需要使用的方法。推荐使用这种方法。
2 ./test.s或 绝对路径/test.sh,test.sh必须有可执行权限
新建的脚本默认是没有x权限的,用chmod +x test.sh 即可加上x权限
3 source test.sh或 . test.sh(.空格test.sh),文件有无x权限都可用
source或“.”命令的功能是:将脚本中的内容直接加载到当前的shell并执行,即在当前shell中加载并执行脚本的命令及语句。
注意:
而前两种方法执行shell脚本时都是在当前shell(称为父shell)开启一个子shell环境,此shell脚本就在这个子shell环境中执行,脚本中变量的改变与父shell无关,不会带回父shell环境中,,脚本执行完后子shell环境随即关闭。
而source或“.”命令直接在当前的父shell环境中执行,一些变量的信息会保存在当前shell中。
举例说明:
- 新建一个test.sh脚本,内容为:A=1
- 然后使其可执行chmod +x test.sh
- 运行sh test.sh后,echo $A,显示为空,因为A=1并未传回给当前shell
- 运行./test.sh后,也是一样的效果
- 运行source test.sh 或者 . test.sh,然后echo $A,则会显示1,说明A=1的变量在当前shell中
二.vi编写test.sh文件
1 #!/bin/bash 为开头第一句,#! 用于指定shell解释器,#用于注释
2 变量
变量名,值,和等号之间不能有空格,如: var=“123”
$var表示引用变量var,当用$嵌套引用多变量时必须用()或{}
变量命名规则:
1)首个字符必须为字母(a-zA-Z)
2)中间不能有空格,可以使用下划线(_)
3)不能使用标点符号
4)不能使用bash里的关键字(可用help命令查看保留关键字)
3 算数运算
bash 支持很多运算符,包括算数运算符、关系运算符、布尔运算符、字符串运算符和文件测试运算符。原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用.如result=`expr 2 + 2`(`符号用~键下的符号而不是单引号)
注意:表达式的操作符和操作数之间一定要有空格
expr的常用运算符:
加法运算:+
减法运算:-
乘法运算:*
除法运算:/
求摸(取余)运算:%
==两个数比较大小==
x -eq y
-eq: equal 返回true
-ne: not equal 返回true
-gt: greater than x>y返回true
-lt: less than x<y返回true
-ge: greater equal x>=y返回true
-le: x<=y返回true