ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 第一行:幻数 - #!/bin/sh(是Bash的软链接) - #!/bin/bash(推荐) 内核会根据它来确定使用什么解释器来执行它,不写不规范。 如果没有设置Linux默认解释器是什么就用什么来解释 # 环境变量 ## 一般定义 在/etc/profile(全局变量下) >export 变量=值 注意:export意味着所有终端都生效,是真正的全局。 为了规范和避免未知错误,最好加上。 如果不加就是在当前终端或者当前脚本中生效,关闭终端或执行完脚本失效。 ## 激活变量 >source /etc/profile >. /etc/profile **注意**:环境变量文件是无法用sh激活的,只有用.和source 经典题: echo "user=`whoami`"> a.sh sh a.sh && echo $user **这道题就是用sh激活环境变量,是绝对不行的** 应该是:source a.sh && echo $user 而且如果永久使用user=`whoami`前要加export ## 在Shell脚本中定义 ``` a=192.168.1.1 b="192.168.1.1" c='192.168.1.1' echo "a=$a" echo "b=$b" echo "c=${c}" ``` 特性: 单引号定义变量:所见即所得 >c='192.168.1.1' ## 特殊变量和环境变量 - $0 获取当前执行脚本的文件名,可以包括脚本路径 - dirname,basename。配合$0使用 - $n 获取脚本的第n个参数值 - $# 获取脚本总共传了几个参数 - $? 查看上个语句返回值,默认返回值如下 - 0:正确 2:权限拒绝 1-125:执行失败(脚本问题) 127:命令输入错误 >=128:执行中取消 - exit 1 指定脚本返回值 - shift 把第n+1参数变为第n个参数,第一个参数消失。场景:使用过的参数就删除(一次性筷子) - $@ //获取当前脚本的所有传参的参数当成字符串:不合并他们为完整字符串 - $* //获取当前脚本的所有传参的参数当成字符串:把他们合并成完整字符串 - $$ //当前shell进程号 ### 简单使用 >sh jiaoben.sh "我是第一个参数" "我是 第二个参数" 我是第三个参数 ``` echo "$0" dirname $0 basename $0 echo "$1" echo "$3" echo "$#" echo "$3" echo "$$" for i in "$*";do echo $i;done for i in "$@";do echo $i;done ``` ### 升级使用 >sh pidjiaoben.sh ``` ``` ## 比较参数 - expr 适合校验文件扩展名:`if expr "$1" : ".*\.pub"; then` - expr 还可以检验是不是整数、分数 - -eq - -lt - -gt - -a 并且:\[ -n "内容" -a "内容"="内容" \] - -o 或者 - -n 为空:\[ -n "内容" \] && {执行内容} - -z 为整数 ``` expr "test.pub" : ".*\.pub" && echo 1 || echo 0 ``` ## 变量替换(备胎功能) >result=${test:=hello} 如果test没有定义值则result显示hello,并且把hello赋值给result >result=${test:-hello} 如果test没有定义值则result显示hello,不把hello赋值给result test如果在之前被定义过则显示定义结果(test=abc;result=${test:-hello};显示为abc) 但如果在之后才定义test=abc则不行,显示结果还是hello 在脚本中删除文件/文件夹一定要使用它 ``` ``` ## 取消定义变量 >unset result ## 清屏