企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
- Shell脚本命令的工作方式有两种:交互式和批处理 - 交互式(Interactive):用户每输入一条命令就立即执行。 - 批处理(Batch):由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多的命令。 如:查看当前所在工作路径并列出当前目录下所有的文件及属性信息。 vim example.sh (下面是内容) \#!/bin/bash \#For Example By linuxprobe.com pwd ls -al 上面第一行脚本声明**(#!)**告诉系统使用哪种Shell解释器来执行脚本; 第二行的注释信息**(#)**是对脚本的作用或一些警告信息; 第三、四行的就是我们平时执行的Linux命令。 Linux中Shell脚本接受参数的变量,$0对应的是当前Shell脚本程序名称,$#对应的是总共有几个参数,$\*对应的是所有位置的参数值,$?对应的是显示上一次命令的执行返回值,而$1、$2、$3……则分别对应着第N个位置的参数值,如下图: ![Image](https://box.kancloud.cn/af194ee9a8b6f86a221be49bf588dc0c_758x173.png) 如:vim example.sh \#!/bin/bash echo “当前脚本名称为$0” echo “总共有$#个参数,分别是$\*。” echo “第1个参数为$1,第5个为$5。” sh example.sh one tow three four five six (执行这个,输出如下) 当前脚本的名称example.sh 总共有6个参数,分别是one two three four five six。 第1个参数为one,第5个为five。 **条件测试语法的执行格式:测试语句格式:\[ 条件表达式 \]** **里面两个均有一个空格** 按照测试对象来划分,条件测试语句可以分为4种: - 文件测试语句; - 逻辑测试语句; - 整数值比较语句; - 字符串比较语句。 文件测试即使用指定条件来判断文件是否存在或权限是否满足等情况的运算符。 #### 文件测试所用的参数 运算符 作用 -d 测试文件是否为目录类型 -e 测试文件是否存在 -f 判断是否为一般文件 -r 测试当前用户是否有权限读取 -w 测试当前用户是否有权限写入 -x 测试当前用户是否有权限执行 如: \[ -d /etc/fstab \] (判断/etc/fstab是否为一个目录类型的文件) echo $? (**显示上一条命令执行后的返回值。如果为0,则目录存在;如果非零,则目录不存在**) \[ -f /etc/fstab \] (判断/etc/fstab是否为一般文件) echo $? (如果为0,则代表文件存在,且为一般文件) \[ -e /dev/cdrom \] && echo “Exist” (判断/dev/cdrom是否存在,存在就输出“Exist”) \[ $USER = root \] || echo “user” (判断系统环境变量USER当前登录是否为管理员,不是就输出user) \[ ! $USER = root \] || echo “administrator”(判断当前用户是否为一个非管理员) 注:&&是前面的条件成立才执行;|| 是前面的条件不成立才执行;!取反。 \[ ! $USER = root \] && echo “user” || echo “root” 上面就是先判断当前的登录用户是否为非管理员用户。 #### 可用的整数比较运算符 运算符 作用 -eq 是否等于 -ne 是否不等于 -gt 是否大于 -lt 是否小于 -le 是否等于或小于 -ge 是否大于或等于 如:\[ 10 -gt 10 \] echo $? (得到1)\[ 10 -eq 10 \] echo $? (得到0) 如:判断可用内存是否小于1024M,若小于则提示 “Insufficient Memory”内存不足。 free -m | grep Mem: | awk ‘{print $4}’(awk ‘{print $4}’这个是只保留第四列) FreeMem=`free -m | grep Mem: | awk ‘{print $4}’` \[ $FreeMem -lt 1024 \] && echo “Insufficient Memory” #### 常见的字符串比较运算符 运算符 作用 = 比较字符串内容是否相同 != 比较字符串内容是否不同 -z 判断字符串内容是否为空 如:\[ -z $String \] echo $? echo $LANG \[ $LANG != “en.US” \] && echo “Not en.US”