编写环境
由于shell就是Linux原生的命令方式,推荐在Linux上编写。如果你的电脑是Windows,可以通过vscode remote连接到VPS。具体可以参考本文。
插件推荐:
- ShellCheck:代码查错
- shellman:代码片段插入
- BashDebug:调试工具(Remote情况下无法使用)
- shell-format:美化工具
第一行
说明脚本解释器,就像.py
要用python执行,shell脚本需要用bash执行
#!/bin/bash
字符串
字符串替换:
echo ${string/23/bb} //abc1bb42341 替换一次
echo ${string//23/bb} //abc1bb4bb41 ** 双斜杠替换所有匹配 **
echo ${string/#abc/bb} //bb12342341 #以什么开头来匹配,根php中的^有点像
echo ${string/%41/bb} //abc123423bb %以什么结尾来匹配,根php中的$有点像
https://www.cnblogs.com/wangym/articles/9121622.html
变量
定义变量时,变量名不加美元符号。使用一个定义过的变量,只要在变量名前面加美元符号即可。
your_name="qinjx"
echo $your_name
echo ${your_name} #变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界
用户输入
使用read命令读取从键盘输入的数据。
echo -n "请输入名称:" #-n:不换行
read name
参数:-s 静默;-p 提示,后接提示文本。
设置空输入时的默认值:
read -p "请输入一个数:" num
if [ -z "${num}" ];then #-z:字符串空则返回true
num=10 #注意这里不要带$
fi
条件与判断
函数与命令的执行结果可以作为条件语句使用。要注意的是,和 C 语言不同,shell 语言中 0 代表 true,0 以外的值代表 false。
函数和递归
shell函数在定义时不需要定义参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数。
一个递归的例子:
#!/bin/bash
echo "请输入一个数字"
read n
func() {
local i="$1"
if [ "$i" -eq 0 ]; then
result=1
else
let "m=i-1"
func "$m"
let "result=$i * $?"
fi
return $result
}
func "$n"
echo "$n的阶乘为:$?"
注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。