企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# shell 脚本 文件后缀.sh ``` #!/bin/bash //头部文件 ``` 编写完成保存后给.sh加权限 就可以执行了 ``` chmod +x test.sh //加权限 test.sh是自己编写好保存好的文件 ``` 本目录下 ``` ./test.sh //就执行了这个文件 ``` # 注释规则: ``` # 注释 ``` # 变量声明: ``` 变量名=值 // =左右不能有空格 ``` # 打印变量值: ``` ceho $变量名 ``` # 字符串拼接: ``` $变量1$变量2 //直接挨到一起就行 ``` # 获取字符串长度: ``` echo ${字符串变量} //注意字符串变量是不加$符号的 ``` # 截取字符串长度: ``` echo ${字符串变量:1:5} //截取第1个字符串到第5个的字符串值 ``` # 声明调用数组: ``` 变量=(‘值1’‘值2’‘值3’) //声明一个数组 ``` ``` echo ${变量[0]} echo ${变量[1]} //打印数组 ``` ``` echo ${变量[*]} echo ${变量[@]} //获取数组元素 ``` ``` echo ${#变量[*]} echo ${#变量[@]} //获取数组长度 ``` # 传值: ``` 脚本 参数1 参数2 参数3 接受参数 $1 $2 $3 $# 传递到脚本的参数个数 $$ 脚本运行的当前进程ID号 $? 显示最后命令的退出状态。 D表示没有错误,其他任何值表明有错误。 ``` # 重定向: ``` >输出重定向 >输入重定向 echo 新文件 > 要覆盖的文件 //输出重定向 ``` ``` 定时任务 /dev/null/2>&1 ``` # 判断: ``` if[ 变量 == 值 ] //这个地方要有空格[ ]里 then echo "输出的条件" fi ``` ``` 运算符 -eq等于 -ne 不等于 -gt大于 -lt小于 -ge大于等于 -le小于等于 逻辑运算符 !取反 -o 或 -a且 ``` ## **注意:如果if 用[[ ]] 双引号的情况下,可以使用&& || 等运算符否则使用以上运算符** **判断代码案例:** ``` usename="liudehua" if [ $usename == "liudehua" ] then echo "hello word" fi ``` ![](https://img.kancloud.cn/7b/00/7b00346be8cb71f0d98505a4e44c47a1_736x232.png) ![](https://img.kancloud.cn/e6/5e/e65e6ab2fd232fbaa432cc5327e9ce9f_1372x780.png) ## **多条件判断代码案例:** ``` #!/bin/bash usename=$1 #外部传值 if [ $usename -lt 60 ] # -lt是小于 then echo "不及格" elif [ $usename -gt 60 -a $usename -lt 80 ] #-gt大于 -a 是并且相当于&& # elif相当于elseif then echo '良好' else # then相当于{} echo "优秀" fi #fi相当于闭合if ``` # **判断目录或者文件是否存在** ``` -e //判断目录或者文件是否存在 ``` ``` -d //判断目录是否存在 ``` ``` -f //判断文件是否存在 ``` ** 输入文件是否存在不存在就创建代码案例:** ``` [[ -e $1]] || mkdir $1 // 输入文件是否存在不存在就创建 ``` # 运算符 ``` `expr $a + $b` // 单独的运算符是计算不了的 要加 反引号`` expr + (+左右要有空格) ``` ## 代码案例: ![](https://img.kancloud.cn/9f/03/9f034bfce481f87e1930249de5c08c0c_508x366.png) ![](https://img.kancloud.cn/b9/22/b9221cce0cd052682155b10ce577d15a_508x345.png) # 循环 ``` 语法: for i in do done ``` ``` for i in 1 2 3 4 5 do echo $i done ``` ## 第二种for循环语法: ``` for i in {0..10} do echo $i done ``` # while 循环语法: 一直循环下去 ``` while true //条件为true 相当于 while(1) do echo 'jjjj' //一直循环下去 打印jjj done ``` ## 第二种while语法: 运行.sh脚本后 ,read 变量 接收终端输入的字符串 ``` while read name //read name 是接收输入的字符串 在终端输入的字符串 do echo $name done ``` 注意::ctrl+c 退出.sh脚本 # case流程语法 ``` 变量 case 变量 in A值) 如果等于A值执行 ;; //结束一条语句 esac //结束语法 ``` 代码应用: ``` action=$1 //接收输入的值 case $action in //case语法 start) //如果值等于start输出这个的值 echo 'start' ;; stop) //如果值等于stop输出这个的值 echo 'stop' ;; restart) //如果值等于restart输出这个的值 echo 'restart' ;; default) //如果值等于default输出这个的值 echo 'star|stop|restart' ;; esac ``` 执行.sh脚本 ![](https://img.kancloud.cn/1c/6f/1c6ff47def9a7c0e168b68e4115ac330_582x101.png) # 函数定义与使用 ``` 第一种定义方法: function 函数名称(){ } 第二种定义方法: 函数名称(){ } ``` ## 函数调用: 在函数定义之后调用,不能在函数定义之前调用 ``` 函数名 //调用 ``` 函数语法解释: ``` #!/bin/bash function xiao(){ echo "第一个函数" } xiao # //调用函数 ``` ## 函数传参数调用: ``` #!/bin/bash function xiao(){ echo `expr $1 + $2` //$1 $2接受参数 } xiao 100 200 # //传递参数 ``` # 文件引入: ``` . /全路径 /全路径/.sh //. 后面带空格 ``` 第二种引入方法 ``` source /全路径/.sh ``` ## 文件引入代码语法: ``` #!/bin/bash . /root/test.sh ``` # 输出带颜色字体: