Shell 内置命令,就是由 Bash Shell 自身提供的命令,而不是文件系统中的可执行文件。
使用type 来确定一个命令是否是内置命令:
从上往下看,第一行的ifconfig是可执行文件,第二行也是可执行文件,第三行的cd才是内嵌命令
通常来说,内置命令会比外部命令执行得更快,执行外部命令时不但会触发磁盘 I/O,还需要 fork 出一个单独的进程来执行,执行完成后再退出。而执行内置命令相当于调用当前 Shell 进程的一个函数, 还是一个进程, 减少了上下文切换。
这里主要可以着重看一下ll这个命令,他其实就是ls -l然后用的alisa内置命令改了一个名字便于操作
alias 别名='命令'
删除指定的别名
unalias 别名
删除当前Shell环境中所有的别名
unalias -a
注意:以上2种方式删除都是临时删除当前Shell的别名, 如果想永久删除必须去配置文件中手动删除
输出所有进行信息
ps -aux
给上面的命令起别名为psList, 并使用psList输出
删除psList别名
echo 是一个 Shell 内置命令,用于在终端输出字符串,并在最后默认加上换行符
默认输出换行语法
echo 字符串
输出不换行语法
echo -n 字符串
输出演示
1.创建echo1.sh
touch echo1.sh
2.编辑文件内容并保存
vim echo1.sh
文件内容
#!/bin/bash
echo "hello"
echo "world"
echo -n "itheima "
echo -n "shell "
/n 转义字符
用于echo输出字符串非结尾处的换行, 但是默认echo无法解析 /n 转义字符
演示
这里的意思是echo输出\n转义字符是无效的,必须通过一下的参数来进行相应的转义
-e 参数
-e 参数用于解析转义字符
echo -e '字符串中含有转义字符'
/c 转义字符
/c 用于强制清除echo的结尾换行输出
演示:
read 是 Shell 内置命令,用于从标准输入中读取数据并赋值给变量。如果没有进行重定向,默认就是从终端控制台读取用户输入的数据;如果进行了重定向,那么可以从文件中读取数据。
read [-options] [var1 var2 ...]
options 表示选项,如下表所示; var 表示用来存储数据的变量,可以有一个,也可以有多个。
options 和 var 都是可选的,如果没有提供变量名,那么读取的数据将存放到环境变量 REPLY中。
需求
使用 read 命令给多个变量赋值
步骤
1.创建文件read1.sh
2.编辑文件, 编写read命令提示用户输入多个信息个多个变量赋值, 保存文件
3.执行read1.sh文件
演示
创建文件
touch read1.sh
vim read1.sh
read1.sh文件内容
#!/bin/bash
read -p "请输入姓名,年龄,爱好: " a b
echo ${a} ${b}
在终端控制台输入时, 设置指定时间内输入密码
步骤
- 创建文件read3.sh
- 编辑文件内容编写, 使用read命令 -t seconds 限制输入时间, 使用 -s 静默模式输入密码
- 执行文件
演示
创建文件
touch read3.sh
编辑文件
vim read3.sh
read3.sh文件内容
#!/bin/bash
read -t 20 -sp '请输入密码(20秒内):' pwd1
printf '\n'
read -t 20 -sp '请再次输入密码(20秒内):' pwd2
printf '\n'
if
[ $pwd1 == $pwd2 ]
then
echo '密码与确认密码一致, 验证通过'
else
echo '密码与确认密码不一致,验证失败'
fi
exit 用于退出当前 Shell 进程结束运行,并返回一个退出状态;使用 $? 可以接收这个退出状态. exit命令可以接受一个整数值作为参数,代表退出状态。如果不指定,默认状态值是 0。 一般情况下,退出状态为 0 表示成功,退出状态为非 0表示执行失败(出错)了。
正确退出语法
exit
错误退出语法
exit 非0数字 # 介于 0~255 之间的整数,其中只有 0 表示成功,其它值都表示失败
exit应用场景
1.结束当前Shell进程
2.当Shell 进程执行出错退出时,可以返回不同的状态值代表不同的错误
需求
编写Shell脚本使用exit 退出, 退出时返回一个非0数字状态值, 执行脚本文件并打印返回状态值
步骤
编辑exit.sh文件, 使用 exit 数字 退出结束当前Shell
执行文件,打印返回状态值
创建文件
touch exit.sh
编辑文件
vim exit.sh
exit.sh文件内容: 使用 exit 数字 退出结束当前Shell
#!/bin/bash
echo 'one'
exit 6
echo 'two'
运行效果
declare命令用于声明 shell 变量。可用来声明变量并设置变量的属性,也可用来显示shell函数。若不加上任何参数,则会显示全部的shell变量与函数(与执行set指令的效果相同)。
declare命令作用
1.declare设置变量的属性
2.查看全部Shell变量与函数
3.实现关联数组变量
不同于普通数组, 关联数组的下标是字符串, 通过字符串下标操作数据
declare [+/-][aArxif][变量名称=设置值]
+/- "-“可用来指定变量的属性,”+"则是取消变量所设的属性。
a 设置为普通索引数组
A 设置为key-value关联数组
r 将变量设置为只读, 也可以使用readonly
x 设置变量成为环境变量,也可以使用export
i 设置为整型变量。
f 设置为一个函数变量
2.查看全部Shell变量与函数定义语法
declare [-fF]
declare 后无参数, 查询全部Shell变量与函数定义
-f 仅查询显示函数定义。
-F 仅查询显示函数名字
3.实现key-value关联数组变量语法
关联数组也称为“键值对(key-value)”数组,键(key)也即字符串形式的数组下标,值(value)也即
元素值。
declare -A 关联数组变量名=([字符串key1]=值1 [字符串key2]=值2 ...)
declare也可以用于定义普通数组, -a 参数创建普通或索引数组 -A 创建关联数组
declare -a 关联数组变量名=(值1 值2 …)
declare -a 关联数组变量名=([0]=值1 [1]=值2 …)
获取指定key的值
${关联数组变量名[key]}
获取所有值
${关联数组变量名[*]} # 方式1
${关联数组变量名[@]} # 方式2
需求
操作一个变量属性, 设置为整型\ 取消整型\设置为只读等操作
给整型变量mm赋值,然后再赋值为非整型,可以从图中看到其实是失败了。
查看所有变量与所有函数
declare
需求
使用declare定义一普通数组,并获取打印元素数据的值
步骤
1.创建declare1.sh文件
2.编辑declare1.sh文件内容, 使用declare定义普通数组数据与打印
2.执行文件
创建文件
touch declare1.sh
编辑文件
vim declare1.sh
declare1.sh文件内容
#!/bin/bash
declare -a arr1=(1 2 3 aa)
echo ${arr1[1]}
echo ${arr1[*]}
declare -a arr2=([0]=1 [1]=2 [2]=3 [4]=aa)
echo ${arr2[1]}
echo ${arr2[*]}
declare -a arr2[3]=4
echo ${arr2[*]}
使用declare定义关联数组并打印输出
注意: 使用参数 -A 才是关联数组 , 关联数组无法使用索引获取