shell变量
什么是变量:
变量就是用一个固定的字符串(也可能是字符数字等的组合),替代更多更复杂的内容,这个内容里可能还会包含变量和路径,字符串等其他内容。变量的定义是存在内存中
变量的类型:
环境变量(全局变量):可以在创建他们的Shell及派生出来的子shell中使用。环境变量又可以分为自定义环境变量和bash内置的环境变量。
局部变量(普通变量):只能在创建他们的shell函数或shell脚本中使用,还记得前面的$user?我们创建的一般都是普通变量。eg:
显示环境变量
查看系统环境变量
普通字符串变量定义测试
把一个命令作为变量
case 语句小结
1)case语句就相当于多分支的if语句。case语句的优势是更规范,易读。
2)case语句适合变量的值少,且为固定的数字或字符串集合。
3)系统服务启动脚本传参的判断多用case语句
练习:实现一个计算器
1.编辑一个脚本:vim calculator.sh
#!/bin/env bash
echo $(($1))
执行:sh calculator.sh 3+2 ===>5
执行:sh calculator.sh 3**2 ===>9
编辑脚本:vim calculator.sh
#!/bin/env bash
echo $(($1$2$3))
执行:sh calculator.sh 3 - 2 ===>1
2.传参并计算
编辑脚本:vim calculator.sh
#!/bin/env bash
a=$1
b=$2
echo "a-b = $(($a -$b))"
echo "a**b = $(($a**$b))"......
3.直接输入命令:echo $[2+3]或echo $[2**3]
防止脚本执行中断的方法:
1)sh while01.sh & #放在后台执行
2)screen 分离 ctrl+a+d 查看screen -ls进入screen -r num
3)nohup while01.sh &
脚本语句小结:
1)while循环的特长是执行守护进程以及我们希望循环不退出持续执行,用于频率小于1分钟循环处理(crond),其他的while循环几乎都可以被for循环替代。
2)case语句可以被if语句替换,一般在系统启动脚本传入少量固定规则字符串用case语句,其他普通判断多用if
3)一句话,if,for语句最常用,其次while(守护进程),case(服务启动脚本)
shell脚本调试技巧小结:
1)要记得首先用dos2unix对脚本格式化
2)直接执行脚本根据报错来调试,有时报错不准确。
3)sh -x调试整个脚本,显示执行过程。
4)set -x和set +x调试部分脚本(在脚本中设置)
5)echo输出变量及相关内容,然后紧跟着exit退出,不执行后面程序的方式,一步步跟踪脚本,对于逻辑错误比较好用。
6)最关键的时语法熟练,编码习惯,编程思想,将错误扼杀在萌芽中,减轻调试负担,提高效率。