shell内置命令

本文详细介绍了BashShell中的内置命令,如alias用于创建别名,echo用于输出字符串,read用于读取用户输入,exit用于退出Shell并返回状态,以及declare用于声明和管理变量。还涵盖了这些命令的用法、语法和示例应用。
摘要由CSDN通过智能技术生成

内置命令介绍

Shell 内置命令,就是由 Bash Shell 自身提供的命令,而不是文件系统中的可执行文件。

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

type 命令

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

内置命令列表

命令说明
:扩展参数列表,执行重定向操作
.读取并执行指定文件中的命令(在当前 shell 环境中)
==alias==为指定命令定义一个别名
bg将作业以后台模式运行
bind将键盘序列绑定到一个 readline 函数或宏
break退出 for、while、select 或 until 循环
builtin执行指定的 shell 内建命令
caller返回活动子函数调用的上下文
cd将当前目录切换为指定的目录
command执行指定的命令,无需进行通常的 shell 查找
compgen为指定单词生成可能的补全匹配
complete显示指定的单词是如何补全的
compopt修改指定单词的补全选项
continue继续执行 for、while、select 或 until 循环的下一次迭代
==declare==声明一个变量或变量类型。
dirs显示当前存储目录的列表
disown从进程作业表中刪除指定的作业
==echo==将指定字符串输出到 STDOUT
enable启用或禁用指定的内建shell命令
eval将指定的参数拼接成一个命令,然后执行该命令
exec用指定命令替换 shell 进程
==exit==强制 shell 以指定的退出状态码退出
export设置子 shell 进程可用的变量
fc从历史记录中选择命令列表
fg将作业以前台模式运行
getopts分析指定的位置参数
hash查找并记住指定命令的全路径名
help显示帮助文件
history显示命令历史记录
jobs列出活动作业
kill向指定的进程 ID(PID) 发送一个系统信号
let计算一个数学表达式中的每个参数
local在函数中创建一个作用域受限的变量
logout退出登录 shell
mapfile从 STDIN 读取数据行,并将其加入索引数组
popd从目录栈中删除记录
printf使用格式化字符串显示文本
pushd向目录栈添加一个目录
pwd显示当前工作目录的路径名
==read==从 STDIN 读取一行数据并将其赋给一个变量
readarray从 STDIN 读取数据行并将其放入索引数组
readonly从 STDIN 读取一行数据并将其赋给一个不可修改的变量
return强制函数以某个值退出,这个值可以被调用脚本提取
set设置并显示环境变量的值和 shell 属性
shift将位置参数依次向下降一个位置
shopt打开/关闭控制 shell 可选行为的变量值
source读取并执行指定文件中的命令(在当前 shell 环境中)
suspend暂停 Shell 的执行,直到收到一个 SIGCONT 信号
test基于指定条件返回退出状态码 0 或 1
times显示累计的用户和系统时间
trap如果收到了指定的系统信号,执行指定的命令
type显示指定的单词如果作为命令将会如何被解释
typeset声明一个变量或变量类型。
ulimit为系统用户设置指定的资源的上限
umask为新建的文件和目录设置默认权限
unalias刪除指定的别名
unset刪除指定的环境变量或 shell 属性
wait等待指定的进程完成,并返回退出状态码

alias内置命令

介绍

alisa 用于给命令创建别名。若该命令且不带任何参数,则显示当前 Shell 进程中的所有别名列表。

上面是系统为了方便命令操作默认将部分命令创建为别名 ll 的命令与ls -l的效果一样, 就是因为ll是别名

alias别名定义语法

alias 别名='命令'

unalias 别名删除语法

删除指定的别名

unalias 别名

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

unalias -a

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

alias演示

输出所有进行信息

ps -aux

给上面的命令起别名为psList, 并使用psList输出

删除psList别名

echo内置命令

echo命令介绍

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

echo输出语法

默认输出换行语法

echo 字符串

输出不换行语法

echo -n  字符串

输出演示

1.创建echo1.sh

touch echo1.sh

2.编辑文件内容并保存

vi echo1.sh

文件内容

#!/bin/bash
echo "hello"
echo "world"
echo -n "itxinzhi "
echo -n "shell "

3.运行echo1.sh文件观察效果

itxinzhi shell输出为一行

echo输出转义字符

/n 转义字符

用于echo输出字符串非结尾处的换行, 但是默认echo无法解析/n 转义字符

演示

-e 参数

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

echo -e '字符串中含有转义字符'

演示

/c 转义字符

/c 用于强制清除echo的结尾换行输出

演示

read内置命令

介绍

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

后续Shell重定向讲解

语法

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

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

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

options支持的参数

选项说明
-a array把读取的数据赋值给数组 array,从下标 0 开始。
-d delimiter用字符串 delimiter 指定读取结束的位置,而不是一个换行符(读取到的数据不包括 delimiter)。
-e在获取用户输入的时候,对功能键进行编码转换,不会直接显式功能键对应的字符。
==-n num==读取 num 个字符,而不是整行字符。
==-p prompt==显示提示信息,提示内容为 prompt。
-r原样读取(Raw mode),不把反斜杠字符解释为转义字符。
==-s==静默模式(Silent mode),不会在屏幕上显示输入的字符。当输入密码和其它确认信息的时候,这是很有必要的。
==-t seconds==设置超时时间,单位为秒。如果用户没有在指定时间内输入完成,那么 read 将会返回一个非 0 的退出状态,表示读取失败。
-u fd使用文件描述符 fd 作为输入源,而不是标准输入,类似于重定向。

示例1:多个变量赋值

需求

使用 read 命令给多个变量赋值

步骤

1.创建文件read1.sh

2.编辑文件, 编写read命令提示用户输入多个信息个多个变量赋值, 保存文件

3.执行read1.sh文件

演示

创建文件

touch read1.sh

编辑文件

vi read1.sh

read1.sh文件内容

#!/bin/bash
read -p "请输入姓名,年龄,爱好: " name age hobby
echo "姓名:$name"
echo "年龄:$age"
echo "爱好:$hobby"

运行效果

示例2:读取一个字符

需求

从终端控制台只读取一个字符

步骤

1.创建文件read2.sh文件

2.编辑文件,编写read命令, 使用-n 1 参数读取一个字符

3.执行文件

演示

创建文件

touch read2.sh

编辑文件

vi read2.sh

read2.sh文件内容

#!/bin/bash
read -n 1 -p '请输入一个字符: ' char
printf '\n'
echo '你输入的字符为:'$char

注意

-n 1只读取一个字符。运行脚本后,只要输入的一个字符,立即读取结束,不用等待用户按下回车键。

printf '\n'语句用于换行,否则 echo 的输出结果会和用户输入的内容位于同一行,不容易区分

运行效果

示例3:限制时间输入

需求

在终端控制台输入时, 设置指定时间内输入密码

步骤
  1. 创建文件read3.sh

  2. 编辑文件内容编写, 使用read命令-t seconds 限制输入时间, 使用-s 静默模式输入密码

  3. 执行文件

演示

创建文件

touch read3.sh

编辑文件

vi 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内置命令

介绍

exit 用于退出当前 Shell 进程结束运行,并返回一个退出状态;使用$?可以接收这个退出状态.

exit 命令可以接受一个整数值作为参数,代表退出状态。如果不指定,默认状态值是 0。

一般情况下,退出状态为 0 表示成功,退出状态为非 0 表示执行失败(出错)了。

语法

正确退出语法

exit

错误退出语法

exit 非0数字  # 介于 0~255 之间的整数,其中只有 0 表示成功,其它值都表示失败

exit应用场景

1.结束当前Shell进程

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

比如打开一个文件时,可以返回1 表示文件不存在,2 表示文件没有读取权限,3 表示文件类型不对。

示例:Shell脚本文件中使用exit退出

需求

编写Shell脚本使用exit 退出, 退出时返回一个非0数字状态值, 执行脚本文件并打印返回状态值

步骤

1.创建exit.sh文件

2.编辑exit.sh文件, 使用exit 数字 退出结束当前Shell

3.执行文件,打印返回状态值

演示

创建文件

touch exit.sh

编辑文件

vi exit.sh

exit.sh文件内容: 使用exit 数字 退出结束当前Shell

#!/bin/bash
echo 'one'
exit 6
echo 'two'

运行效果

declare内置命令

介绍

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

declare命令作用

1.declare设置变量的属性

2.查看全部Shell变量与函数

3.实现关联数组变量

不同于普通数组, 关联数组的下标是字符串, 通过字符串下标操作数据

语法

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

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

示例1:设置变量属性

需求

操作一个变量属性, 设置为整型\ 取消整型\设置为只读等操作

步骤
  1. 使用declare设置一个整型变量并赋值

  2. 取消变量的整型类型, 尝试设置其他类型值尝试

  3. 设置变量只读, 尝试赋值测试

演示

示例2:查看当前Shell所有函数名

查看所有变量与所有函数

declare

查看所有函数与定义

declare -f

查询所有函数名列表

declare -F

示例3:实现普通索引数组

需求

使用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[*]}

示例4:实现key-value关联数组

需求

使用declare定义关联数组并打印输出

演示

注意: 使用参数-A 才是关联数组 , 关联数组无法使用索引获取

  • 24
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值