shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。
linux笔记
链接:https://pan.baidu.com/s/16GZCPfUTRzUqIyGnYwPuUg?pwd=s5xt
提取码:s5xt
前两种方式都是在当前shell中打开一个子shell来执行脚本内容,当脚本内容结束,则子shell关闭,回到父shell中。
第三种,也就是使用在脚本路径前加“.”或source的方式,可以使脚本内容在当前shell里执行,而无需打开子shell。
开子shell与不开子shell的区别就在于,环境变量的继承关系,如在子shell中设置的当前变量,父shell是不可见的。
系统预定义变量:$HOME $PWD $SHELL $USER
。
# echo "这是注释"
echo "这不是注释"
:<
定义变量不能有空格
name=golitter
# 等价于
name="golitter" # 双引号可以转义
name='golitter' # 单引号不能转义
单引号与双引号的区别:
使用变量
echo $name # 输出 golitter
等价于
echo ${name} # 带花括号可以帮助识别变量边界
删除变量
unset name
声明静态变量:readonly
变量,注意:不能unset。
基本语法 read [-p -t] parameter
str="string"
echo ${#str}
echo ${str:0:3} # 输出:str
在执行shell脚本时,可以向脚本传递参数。$1是第一个参数,$2是第二个参数,以此类推。特殊的, 0 是文件名(包含路径)。注意:超过 10 后要用花括号括起来 ‘ 0是文件名(包含路径)。注意:超过10后要用花括号括起来` 0是文件名(包含路径)。注意:超过10后要用花括号括起来‘{11}`。
$#
:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性$*
:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体$@
:这个变量也代表命令行中所有的参数,不过$@
把每个参数区分对待$?
:最后一次执行的命令的1返回状态。如果为0,表示上一个命令正确执行,否则非正常执行。$*
和$@
区别$*
和$@
都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 2.. 2 .. 2..n的形式输出所有参数。
当它们被双引号“”包含时,$*
会将所有参数作为一个整体,以”$1 $2 … n “形式输出; ‘ n“形式输出;` n“形式输出;‘@`会将各个参数分开,以"$1" " 2 " . . . " 2" ... " 2"..."n"的形式输出所有参数。
$((运算式))
$[运算式]
常用判断条件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LWgiIrup-1683084147468)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230502220142536.png)]