注意事项
在ubutun上,申明变量的时候 ‘=’ 之间不能有空格,但是if 条件判断的时候一定要有空格
myname=huangzhenshi echo $myname if [ !$myname = "huangzhenshi" ]; then echo "access deny" fi
|
if [条件]; then fi, 如果分号省略的话,then 必须换行,否则会报错,因为在解析一个分号,或者一次换行的时候,操作系统会进行一次逻辑判断。
脚本的执行方式,最好用 ./的方式 或者绝对路径的方式来执行,而不是用sh的方式,因为sh的方式要求更严格,对shell的格式,例如 if判断的 == 在sh执行下报错,在 ./方式下正常
- if [条件] if 和[ 之间一定要有空格啊,真是坑爹
运行 shell脚本的方法
其中 第四和第五种要求权限
1)source .sh 在当前线程当中执行 shell脚本,变量通用
2)sh .sh 不需要执行权限,只需要有sh的权限即可,然后通过sh 调用.sh 文件
3). .sh 在当前shell环境中执行 bash shell脚本
4)/绝对路径/*.sh /home/huang/test.sh 直接运行
5)./startup.sh
if 判断
- 演示 or(-o) 、 and(-a) 和! 运算
- $# 表示参数的长度
- $0 代表脚本的名字 $1第一个参数
- ! 运算后面最好接一个空格,否则字符串不报错,但是如果跟的是数字的话就一定需要空格,否则报错
- 数字比大小 -eq -ne -gt -lt -ge -le (相等 、不等、大于、小于、不大于、不小于)
- 数字比较大小 也可以直接用 = 、 != ,但是不能用 > <等符号,一般用于参数的个数判断
- -z 判断是否为0 或者为空字符串
- if 判断引用变量都用 “” 包起来,不然变量含空格的时候就会报错
- 判断尽量全部用 = 号,不用 ==号, 条件之后都用分号,不要省略
标准的if 判断写法
#/bin/bash read -p "Do u wanna delete the file? Y/N:" yn if [ "$yn" = "Y" -o "$yn" = "y" ]; then echo "deleted success" elif [ "$yn" = "N" -o "$yn" = "n" ]; then echo "deleted interupted" else echo "operation fail ,input error" fi
|
#!/bin/bash if [ "$1" = "start" ] then echo "do start" elif [ "$1" = "stop" ] then echo "do stop" else echo "Please make sure the positon variable is start or stop." fi
|
result
root@huang-virtual-machine:/home/huang# source testif.sh start do start root@huang-virtual-machine:/home/huang# source testif.sh stop do stop root@huang-virtual-machine:/home/huang# source testif.sh test Please make sure the positon variable is start or stop.
|
逻辑 and or !
#!/bin/bash read -p "please input your name: " name # 演示 or and 和! 运算 if [ "$name" = "huang" -o $name = "Huang" ]; then echo "welcome Admin Huang" elif [ "$name" = "boss" ]; then echo "welcome manager" else echo "Welcome visit our website: "$name fi if [ "$1" = "huang" -a $2 = "zhenshi" ]; then echo "Welcome superAdmin Huang zhenshi" elif [ ! "$1" = "boss" ]; then echo "fuck the hell" else echo "hello boss" fi echo "argument length is "$# if [ ! $# -eq 2 ] then echo "argument length error" else echo "length correct" fi if [ -z "$3" ] then echo "we need more than 3 arguments" fi
|
申明变量
- 直接等号申明
name='huangzhenshi' echo $name
|
可以通过大括号指明变量,这样就可以无缝拼接字符串了,否则就可以空格 来拼接字符串
root@huang-virtual-machine:/home/huang# echo ${name}666 huangzhenshi666 $name 666 huangzhenshi 666
|
- 通过read获取变量
1) -s 不显示输入的字符
2) -p 显示提示符
3) -t 光标等待时间
# define variable by read read -s -t 20 -p "please type your password:" password echo connecting echo "your password:'"${password}"'is correct!"
|
Export
直接运行的话会打印出所有的环境变量
Export 变量名 会把该变量变成环境变量
Declare
-I 声明的变量类型为 整数
-x 声明的变量为环境变量
+x 把环境变量取消掉
Declare –I sum=3+3
Echo $sum //6
Declare -x name=huang //设置环境变量 name为huang
for 循环
#!/bin/bash for((i=1;i<=10;i++)); do echo $(expr $i \* 3 + 1); done #!/bin/bash for i in $* ; do echo $i is input chart\! ; done #!/bin/bash for i in f1 f2 f3 ; do echo $i is appoint ; done
|