面试题:
1.Shell中单引号和双引号区别
1)单引号不取变量值
2)双引号取变量值
3)反引号,执行引号中命令
4)双引号内部嵌套单引号,取出变量值
5)单引号内部嵌套双引号,不取出变量值
一、shell脚本
1.shell脚本概述
shell脚本可以通过cat /etc/shells 查看脚本的使用命令,默认使用/bin/bash
2.shell脚本的运行
# ① 默认执行方式(底层使用/bin/bash直接执行)
chmod +x 脚本文件(x为执行 r为读 w为写)
./脚本# ② 还可以基于sh程序
不需要添加执行权限,直接通过以下命令实现
sh 脚本文件
shell本质上是多个命令的集合。
3.shell脚本的快速入门
#创建一个Shell文件
vim shell01.sh
#!/bin/bash (声明默认/bin/bash 执行,不写问题也不大)
echo 'hello world'
##################上面是文件,下面是命令行#########
#保存之后,为其添加一个x执行权限
chmod +x shell01.sh #文件变成绿色,为可执行文件
#调用shell脚本
./shell01.sh
如果怕Shell脚本有错误,也可以通过sh -x shell01.sh
:set nu显示行号。
三、shell基础
1.shell变量
定义变量:
访问变量(有定义,有访问):
设置只读变量以及删除变量:
2.shell中的字符串
shell中字符串定义可以使用单引号、可以使用双引号、也可以不使用引号;推荐使用双引号定义字符串,方便在字符串中实现变量的提取操作。
不要加空格,空格在shell脚本中代表着结束。
3.shell脚本中的反撇号
MySQL中可以使用,一般用于表示标注表名或者特殊的关键字,使用反撇号,就可以使用关键字作为表名或字段。(数据库表明或字段是中文,用反撇号注明)
Shell脚本中也可以使用反撇号,主要用于执行命令,其内部的命令可以正常解析。
4.shell动态传参
$# :获取参数的个数
$1 :获取第一个参数
$2 :获取第二个参数
$N :获取第N个参数
$* :获取所有参数(以字符串方式)
$! :获取后台运行的最后一个任务的进程号(PID)
$? :获取上一个执行命令成功与否,如果返回0,代表上一个命令执行成功了,反之都代表上一个命令报错了
案例:
(31条消息) shell中source命令与sh命令的区别_source和sh区别-CSDN博客
"source"和"."的功能是一样的,可以调用脚本,并将脚本里的函数也传递到当前的脚本或者解释器中,即不会开启新的bash而是在当前bash中运行。
"sh"后面跟脚本名称,则不会将该脚本的函数传递进来,即需要开启新的bash,"sh"实际上是执行一个脚本,最后执行完毕会将内存释放掉,不会保存变量。
而"."和"source"则不会新的bash进程,这就是为什么在/etc/init.d/这个目录下有很多的脚本都会用"."去调用脚本。综上所述:
生产环境中编写脚本一般会使用sh命令去执行脚本,因为使用sh命令执行的脚本执行完毕后会自动释放内存并不会影响当前进程中的变量。除非你明确直到想要脚本中的变量要在当前bash中生效(比如重新读取配置文件)则可以使用"source"或者"."