Shell-常用内置命令

Shell-常用内置命令

二月 21, 2021

内置命令相比于可执行脚本文件的优势:

内置命令碧可执行文件执行得更快

因为执行外部命令不但会触发磁盘I/O,还需要fork一个独立进程来执行,执行完毕再退出

而执行内置命令相当于调用当前Shell进程的一个函数,仍然再当前Shell环境进程内执行,减少了上下文切换的开销

查询是否为内置命令

1
type commmand

alias设置别名

1
2
3
4
5
alias #查询显示当前Shell进程的所有别名列表
alias 别名="command" #为命令添加别名

unalias 别名 #删除别名
unalias -a #删除所有别名

P.S 删除别名只能临时删除当前Shell别名,若想永久删除需要去配置文件中手动删除

echo输出字符串

1
2
3
echo 字符串 #默认换行输出
echo -n 字符串 #不换行输出
echo -e 字符串 #解析转义字符输出

read读取控制台输入

默认从终端控制台读取用户输入数据

若进行重定向,则可以从文件中读取数据

1
2
3
4
5
6
7
8
9
10
11
read #若没有提供变量,默认会把读取的数据存放到REPLY环境变量中,$REPLY会保存read最后一个读入的数据
read value #读入数据到value变量中
read -p "请输入数值" value #显示提示信息
read -n 5 value #读取5个字符到value变量中
read -t 2 value #设置2秒超时时间,超出时间没有输入完成,read会返回一个非零状态码,表示读取失败
read -s value #静默模式,屏幕不显示输入字符,常用于密码输入
read -a array #读取数据赋值到数组array中
read -d delimiter value #用delimiter字符串指定读取结束的位置,而非换行符(回车),value变量内容不包含delimiter字符串
read -e #获取用户输入时,对功能码进行编码转换,不会直接显示功能键对于的字符
read -r #原样读取,不会把反斜杠解释为转移字符
read -u fd #使用文件描述符fd作为输入源,和重定向相似

exit退出

用于退出当前Shell进程,并且会返回状态码

可使用$?查看退出状态码

1
2
3
exit #正确退出,默认换回状态码0,一般代表命令执行成功

exit 非零数字 #错误退出,建议返回0~255(不同状态码代表不同的错误),一般代表命令执行失败

declare设置变量

  • 声明Shell变量
  • 声明变量并设置变量的属性
  • 显示Shell函数
  • 显示所有Shell变量和函数(set指令相似)
1
2
3
4
5
6
7
8
9
10
11
12
declare #显示所有Shell变量和函数
declare -f #查询所有函数的定义
declare -F #查询所有函数的名称列表

declare [-/+][aArxif][变量名称=设置值]
#+/-:"-"用来指定变量的属性,"+"则是取消变量所设的属性
#a array:设置为普通索引数组
#A Array:设置为key-value关联数组
#r readonly:设置为只读变量,也可以直接使用readonly
#x export:设置为常量,也可以直接使用export
#i int:设置为整型变量
#f function:设置为一个函数变量

关联数组变量

关联数组最好用declare方法创建,直接用变量创建关联数组会有大坑(╯▔皿▔)╯

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

#获取指定key的值
${关联数组变量名[key]}

#获取所有值
${关联数组变量名[*]} #方式1
${关联数组变量名[@]} #方式2

索引数组变量

1
2
declare -a 索引数组变量名=(值1 值2 值3 ...)
declare -a 索引数组变量名=([0]=值1 [1]=值2 [2]=值3 ...)

test测试

整数比较测试

1
test 1 -eq 2

test命令和[]用法相似

options 说明
-eq 等于则为真
-ne 不等于则为真
-gt 大于则为真
-ge 大于等于则为真
-lt 小于则为真
-le 小于等于则为真

字符串比较测试

1
2
test "a" == "b"
test -z "aaa"
options 说明
=== 等于,等于返回0代表成功,否则返回1代表失败
!= 不等于
\< 小于
\> 大于
-z 字符串长度为零则为真
-n 字符串长度不为零则为真

文件测试

options 说明
-e exists,如果文件存在则为真
-r read,如果文件存在且可读则为真
-w write,如果文件存在且可写则为真
-x execute,如果文件存在且可执行则为真
-s string,如果文件存在且至少有一个字符则为真
-d directory,如果文件存在且为目录则为真
-f file,如果文件存在且为普通文件则为真
-c character,如果文件存在且为字符型特殊文件则为真
-b 如果文件存在且为块特殊文件则为真