shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。
linux笔记
链接:https://pan.baidu.com/s/16GZCPfUTRzUqIyGnYwPuUg?pwd=s5xt
提取码:s5xt
脚本执行
- 采用bash或者sh+脚本的相对路径或绝对路径(不用赋予脚本+x权限)
- 采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)
- 在脚本的路径前加上 ”."或source
前两种方式都是在当前shell中打开一个子shell来执行脚本内容,当脚本内容结束,则子shell关闭,回到父shell中。
第三种,也就是使用在脚本路径前加“.”或source的方式,可以使脚本内容在当前shell里执行,而无需打开子shell。
开子shell与不开子shell的区别就在于,环境变量的继承关系,如在子shell中设置的当前变量,父shell是不可见的。
系统预定义变量:$HOME $PWD $SHELL $USER
。
注释
# echo "这是注释"
echo "这不是注释"
:<<zhu
这是注释
zhu
变量
定义变量不能有空格
name=golitter
# 等价于
name="golitter" # 双引号可以转义
name='golitter' # 单引号不能转义
单引号与双引号的区别:
- 单引号中的内容会原样输出,不会执行、不会取变量;
- 双引号中的内容可以执行、可以取变量;
使用变量
echo $name # 输出 golitter
等价于
echo ${name} # 带花括号可以帮助识别变量边界
删除变量
unset name
声明静态变量:readonly
变量,注意:不能unset。
变量定义规则
- 变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
- 等号两侧不能有空格。
- 在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
- 变量的值如果有空格,需要使用双引号或单引号括起来。
read读取控制台输入
基本语法 read [-p -t] parameter
- -p:指定读取值时的提示符
- -t:指定读取值时等待的时间(秒) 如果不加 -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"的形式输出所有参数。
运算符
$((运算式))
$[运算式]
条件判断
- test condition
- [ condition ] (* condition 前后要有空格)
常用判断条件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LWgiIrup-1683084147468)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230502220142536.png)]