一、内置命令介绍
shell 内置命令,就是由 Bash shell 自身提供的命令,而不是文件系统中的可执行文件
使用type 来确定一个命令是否是内置命令:
type 命令
通常来说,内置命令会比外部命令执行得更快:
- 执行外部命令时不但会触发磁盘 I/0,还需要 fork 出一个单独的进程来执行,执行完成后再退出。
- 执行内置命令 相当于调用当前 Shell 进程的一个函数
- 执行内置命令 是在当前Shell环境进程内,减少了上下文切换。
1.1 alias设置命令别名
- alisa 用于给命令创建别名
- 若该命令且不带任何参数,则显示当前 Shell 进程中的所有别名列表
好处: 可以将经常操作比较复杂的命令进行设置别名,通过别名的操作提高工作效率
alias 别名="命令"
这里使用单引号或双引号都可以
删除指定的别名
unalias 别名
删除当前Shell环境中所有的别名
unalias -a
注意: 以上2种方式删除都是临时删除当前Shell的别名,如果想永久删除必须去配置文件中手动删除
举例:
alias pslist="ps -aux" 查看所有进程
alias wn1="watch -n 1 nvidia-smi" 1s刷新一次nvidia-smi界面
1.2 echo输出字符串
- echo 是一个 shell 内置命令,用于在终端输出字符串,并在最后默认加上换行符
默认输出换行语法
echo 字符串
输出不换行语法
echo -n 字符串
- 用于echo输出字符串非结尾处的换行,但是默认echo无法解析/n 转义字符
echo -e "hello \nworld" # -e 可解析转义字符
\c清除echo结尾换行
1.3 read读取控制台输入
read 是 Shell 内置命令,用于从标准输入中读取数据并赋值给变量。
- 如果没有进行重定向,默认就是从终端控制台读取用户输入的数据;
- 如果进行了重定向,那么可以从文件中读取数据。
read [-options] [varl var2 ..]
- options 表示选项,如下表所示;
- var 表示用来存储数据的变量,可以有一个,也可以有多个
- options 和var 都是可选的,如果没有提供变量名,那么读取的数据将存放到环境变量 REPLY 变量中
- $REPLY保存read最后一个读入命令的数据options支持的参数
案例:读取多个字符
#!/bin/bash
#打印每一个变量的值
#使用read命令读取数据,要有提示信息"请输入姓名,年龄,爱好:”将数据赋值给多个变量read -p “请输入姓名,年龄,爱好:” name age hobbyecho "姓名:${name}"
echo "年龄:${age}"
echo "爱好:${hobby}"
案例:读取一个字符
#!/bin/bash
# 使用read命令读取数据,要有提示信息 "您确定要删除数据吗?(请输入y/n):" 并且设置读取一个字符
read -n 1 -p "您确定要删除数据吗?(请输入y/n):" char# 打印这个字符输出
printf "\n"
echo "您输入的字符: ${char}"
案例:限制时间输入
#!/bin/bash# 使用read命令读取数据,要有提示信息"请输入密码(20秒内):" 并且设置限制时间20秒read -t 20 -sp "请输入密码(20秒内 ):" pwd1
echo
read -t 20 -sp "请再次输入密码(20秒内):" pwd2
echo # 校验密码与再次输入的密码是否一致if [ $pwd1 == $pwd2 ]
thenecho"密码与确认密码一致,验证通过"
elseecho "密码与确认密码不一致,验证失败"fi
s 静默模式
1.4 exit退出
exit 用于退出当前Shell环境进程结束运行,并且可以返回一个状态码.一般使用 $? 可以获取退出状态码
正确退出
exit
错误退出
exit 非0数字 #配合$?用于业务处理
1.5 declare设置变量
- declare命令用于声明 shell 变量。
- 可用来声明变量并设置变量的属性,也可用来显示shell函数。
- 若不加上任何参数,则会显示全部的shell变量与函数(与执行set指令的效果相同)。
1.declare设置变量的属性[重要]
declare -i age=20 #设置整形变量declare +i age #取消限制declare -r age #只读变量
2.查看全部Shell变量与函数
declare 查看全部Shell变量与函数
declare -f 查询所有函数的定义
declcare -F 查询所有函数的名称列表
3.实现关联数组变量
关联数组也称为“键值对 (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.6 test
shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试功能与[]一样
1.6.1 整数比较
if test 数字1 options 数字2
then
...
fi
1.6.2 字符串比较
test "a" == "b"; echo $?
test "a" \> "b"; echo $?
1.6.3 文件比较
test -e /home/w/pty.txt; echo $?
test -r /home/w/pty.txt; echo $?