Shell简介
shell脚本:一堆命令的集合
shell脚本文件 扩展名为 .sh
shell脚本第一行一定要为:#!/bin/bash 表示使用bash
vi my.sh 创建shell脚本文件 执行前需要给脚本文件执行权限 :chmod 777 my.sh 后才可执行
交互式脚本
通过read读取用户输入的东西
#!/bin/bash
echo "please input name:"
read name #用read读取,将读到的东西赋值给name变量
echo "your name:" $name #使用变量的值是不需要括括号
#!/bin/bash
read -p "input your age and height:" age height #一次性读取两个值 -p在输入前可打印提示信息
echo "your age=$age, your height=$height" #在shell使用变量时不需要括括号
数值计算
shell仅支持整形,数值计算使用 $(( 表达式 ))
#!/bin/bash
echo "please input two int num:"
read -p "first num" first
read -p "second num" second
total=$(($first+$second)) #此处的=两边不能有空格
echo "$first+$second=$total" #使用变量时不需要括括号
test命令
test命令用于查看文件是否存在、权限等信息,可以进行数值,字符,文件三方面的测试。
&& 和 || 命令:cmd1 && cmd2 当cmd1执行完并且正确,那么cmd2开始执行,如果cmd1执行完毕错误,那么cmd2不执行。 cmd1 || cmd2 当cmd1执行完并且正确,那么cmd2不执行,反之cmd2执行。
#!/bin/bash
echo "please input file name:"
read -p "file name" filename
test -e $filename && echo "$filename is exist" || echo "$filename is not exist"
#使用test -e 查看某个文件是否存在
test $firststr == $secondstr && echo "$firststr等于$secondstr" || echo "$firststr不等于$secondstr" #测试两个字符串是否相等
中括号 [ ] 判断符
[ ]里只能输入 == 或 !=
↓要有空格隔开 要有空格隔开↓ 且在 [ ] 内无论是变量还是字符串都要用 " " 引起来
[ "$firststr" == "$secondstr" ] && echo "$firststr等于$secondstr" || echo "$firststr不等于$secondstr"
默认参数
$0-$n,表示shell脚本的参数,包括shell脚本命令本身,shlle脚本命令本身为$0
$#:#表示最后一个参数的标号。
$@:表$1、$2、$3.....
$0 就是shell脚本的名字;
$# 是共有多少个参数
$@ 整个参数的内容
$1 $2 第一个参数、第二个参数
条件判断
#!/bin/bash
read -p "please input(Y/N)" value
if [ "$value" == "Y" ] || [ "$value" == "y" ]; then
echo "your input is Y"
exit 0
fi
if [ "$value" == "N" ] || [ "$value" == "n" ]; then
echo "your input is N"
exit 0
fi
if 条件判断; then
判断成立要做的事情
fi
#if then else语句写法:
if 条件判断; then
条件判断成立要做的事情
else
条件判断不成立要做的事情
fi
#或者这样写:
if 条件判断; then
条件判断成立要做的事情
elif [条件判断]; then
条件判断成立要做的事情
else
条件判断不成立要做的事情
fi
#!/bin/bash
read -p "please input(Y/N)" value
if [ "$value" == "Y" ] || [ "$value" == "y" ]; then
echo "your input is Y"
#exit 0
elif [ "$value" == "N" ] || [ "$value" == "n" ]; then
echo "your input is N"
#exit 0
else
echo "你这输入的是啥玩意??"
fi
最后还有case语句,写法如下:
case $变量 in
“第1个变量内容”) //这里注意括号只有一半
程序段
;; //这两个分号一定要写,表示该程序块结束!!
“第2个变量内容”)
程序段
;;
“第n个变量内容”)
程序段
;;
esac
#!/bin/bash
case $1 in
"a")
echo "param is:a"
;;
"b")
echo "param is:b"
;;
*) #这里的通配符*不能用引号引住
echo "其他的玩意"
;;
esac
运行时 ./my.sh a 需要加入参数
shell脚本函数
shell脚本支持自定义函数:
function 函数名(){
//函数代码
}
#!/bin/bash
function help(){
echo "this is help cmd"
}
function close(){
echo "this is close cmd"
}
case $1 in
"-h")
help #调用函数直接写函数名
;;
"-c")
close
;;
esac
函数传参:
#!/bin/bash
print(){
echo "param 1:$1"
echo "param 2:$2"
}
print a b #函数传参直接在后面跟着
shell循环
while [条件]
do
//循环代码块
done
until [条件] //条件不成立时进入循环
do
//循环代码块
done
for 变量 in con1 con2 con3 //变量在什么范围里
do
//循环代码块
done
for ((i=0; i<=10; i++)) //注意有两层括号
do
//循环代码块
done
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库