2022-06-24-Shell系列04丨 shell内置命令

一.alias 设置别名

1.目标

  • 理解内置命令的含义
  • 能够使用alias内置命令给命令定义别名

2.内置命令介绍

shell内置命令,是bash shell自身提供的命令,而不是文件系统的可执行文件。

使用type来确定一个命令是否是内置命令:

type 命令

20221221225837

通常来说,内置命令比外部命令执行的更快,执行外部命令时不但会触发磁盘I/O,还需要fork出一个单独进程来执行,执行完后再退出。而执行内置命令相当于调用当前shell进程的一个函数,还是在当前shell环境进程内,减少了上下文切换。

3.内置命令列表

20221221230353

20221221230426

20221221230446

4.alias介绍

alias用于给命令创建别名

好处:可以将经常操作比较复杂的命令进行设置别名,通过别名的操作提高工作效率。

若该命令不带任何参数,则显示当前shell进程中的所有别名列表。

20221221231024

5.alias使用

  • alias定义别名
alias 别名="命令"

这里使用单引号或双引号都可以

  • unalias别名删除语法

删除指定的别名

unalias 别名

删除当前shell环境中所有的别名

unalias -a

注意:以上2种方式删除都是临时删除当前shell环境的别名,如果想永久删除必须去配置文件中手动删除。

6.演示

alias pslist="ps -aux"
# 查看是否生效
alias
# 使用pslist代替原始命令
pslist
# 删除别名
unalias pslist

二.echo 输出字符串

1.目标

能够echo输出不换行的字符串

能够使用echo输出转义字符

2.命令介绍

echo是shelL内置命令,用于在终端输出字符串,并在最后默认加上换行符

3.换行/不换行语法

  • 默认输出换行语法
echo 字符串
  • 输出不换行语法
echo -n 字符串

4.输出转义字符

\n 转义字符

-e 参数用于解析转义字符

echo "hello \nworld"
# hello \n world

# 使换行生效需要与 -e 搭配使用
echo -e "hello \nworld"
# hello 
# world

# 清除结尾的换行
echo -e "hello world\c"

三.read 读取控制台输入

1.目标

  • 理解read命令的作用
  • 使用read给多个变量赋值
  • 使用read读取一个字符
  • 使用read限制时间输入

2.介绍

read是shell内置命令,用于从标准输入中读取数据并赋值给变量。如果没有进行重定向,默认就是从终端控制台读取用户输入的数据;如果进行了重定向,那么可以从文件中读取数据。

3.语法

read [-options] [var1 var2 ...]

options 表示选项,var表示用来存储数据的变量,可以有一个,也可以有多个

options 和var都是可选的,如果没有提供变量名,那么读取的数据将存放到环境变量 REPLY 变量中。

REPLY保存read最后一个读入命令的数据

e.g.:

20221222163921

read name
lucy
echo $name
# lucy

4.options支持的参数

20221231101842

4.1 实例1:多个变量赋值

编辑read1.sh脚本文件。使用read命令读取数据,要有提示信息,将数据赋值给多个变量

#!/bin/bash
read -p "please input name,age,hobby:" name age hobby
echo "name:${name}"
echo "age:${age}"
echo "hobby:${hobby}"

4.2 读取一个字符

编辑read2.sh脚本文件。要有提示信息,并且设置读取一个字符

read -p "确定要删除数据吗?(请输入y/n):" -n 1 char
printf "\n"  # 添加换行,也可以使用一个echo代替
echo "输入的字符:${char}"

4.3 限制时间输入

编辑read3.sh,使用read命令读取数据,要有提示信息“请输入密码(20s内)”并设置限定时间为20s

# 输入密码,静默模式
read -t 20 -sp "请输入密码(20s内):"  pwd1
# 换行
echo
# 再次输入密码
read -t 20 -sp "请再次输入密码(20s内):"  pwd2
# 换行
printf "\n" 
# 校验两次密码是否一致
if [$pwd1 == $pwd2]
then
    echo "两次输入一致,验证通过"
else
    echo "两次输入不一致,验证失败"
fi

四.shell内置命令:exit退出

1.介绍

exit用于退出当前shell环境进程结束运行,并且可以返回一个状态码,一般使用$? 可以获取退出状态码

2.语法

正确退出语法

exit # 默认返回状态码0,0代表命令执行成功

错误退出语法

exit # 非0数字,数字建议的范围0-255,一般代表命令执行失败

3.exit应用场景

1.结束当前shell进程

2.当shell进程执行出错退出时,可以返回不同的状态值代表不同的错误

脚本文件exit.sh

#!/bin/bash
echo "hello"
exit 2
echo "world"

终端输入:

sh exit.sh
# hello
echo $?
# 2

五.declare设置变量

1.目标

  • 能够使用declare设置变量的属性
  • 能够使用declare查看全部shell变量与函数
  • 能够使用declare实现索引数组与关联数组变量

2.介绍

declare命令用于声明shell变量,可用来声明变量并设置变量的属性,也可用来显示shell函数。若不加上任何参数,则会显示全部的shell变量与函数(与执行set指令的效果相同)。

3.declare命令作用

  • declare设置变量的属性
  • 查看全部shell变量与函数
  • 实现关联数组变量

4.declare设置变量的属性语法

declare [+/-][aArxif][变量名称=设置值]

20221231122544

5.示例1:设置变量属性

需求:操作一个变量属性,设置为整型、取消整型、设置为只读等操作

# -i设置为整型后,age之后只能接收整型数据
declare -i age=20
age=abc
echo $age
# 设置为整型后,再次赋值字符串不生效,这时置为0
# 0
# 再次赋值为20,发现是可以打印出正确结果的
age=20
echo $age
# 20

# 取消age的整型限制
declare +i age
age="abc"
echo $age
# abc

# 增加只读的限制
declare -r age
age=123
# age:只读变量

6.实现key-value关联数组变量语法

关联数组也称为“键值对(key-value)”数组,键(key) 也即字符串形式的数组下标,值(value)也即元素值。

declare -A 关联数组变量名=([字符串key1]=值1 [字符串key2]=值2 ...)

declare 也可以用于定义普通索引数组,-a 参数创建普通或索引数组,-A 创建关联数组

获取指定key的值

${关联数组变量名[key]}

获取所有值

${关联数组变量名[*]} #方式1
${关联数组变量名[@]} #方式2

演示:

20230202225750