shell脚本的备忘录

编写环境

由于shell就是Linux原生的命令方式,推荐在Linux上编写。如果你的电脑是Windows,可以通过vscode remote连接到VPS。具体可以参考本文

插件推荐:

  1. ShellCheck:代码查错
  2. shellman:代码片段插入
  3. BashDebug:调试工具(Remote情况下无法使用
  4. 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}来获取参数。