shell常用命令二

内建命令

所谓内建命令,就是bash自身提供的命令,不是外部可执行程序文件,可以用type来确定一个命令是否内建命令。
$PATH 变量包含的目录,都是外部命令
内建命令相当于调用shell进程的一个函数,比外部命令执行的快

type cd
type ifconfig
  • Bash 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发送一个系统信号
let 计算一个数学表达式中的每个参数
local 在函数中创建一个作业域受限的变量
logout 退出shell登录
mapfile 从STDIN读取数据行,并将其加入索引数组
popd 从目录栈中删除记录
printf 使用格式化字符串显示文本
pushd 向目录栈添加一个目录
pwd 显示当前工作目录的路径名
read 从STDIN读取一行数据并将其赋给一个变量
readarray 从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 等待指定的进程完成,并返回退出状态码

echo

用来在终端输出字符串,并在最后默认增加换行符。
默认不会解析\开头的转义字符

echo  str
# -n 取消换行
echo  -n str
# -e 解析转义字符,行尾\c 取消换行
echo -e "hello \n world"
echo -e "hello \c"

read

用来从标准输入中读取数据赋值给变量,默认从键盘读取,重定向可以从文件读取

read [-options] [variables]

options 表示选项,variable表示用来存储数据的变量,可以多个,两者都是可选,如果没有变量名,默认赋值给REPLY。

  • options 选项
选项 说明
-a array 读取的数据赋值给数据array,从下标0开始
-d delimiter 用字符串delimiter指定读取结束的位置,而不是换行数,不包括delimiter
-e 获取数据进行编码转换,不会显示功能键字符
-n num 读取num个字符,而不是整行字符
-p prompt 显示提示信息,提示内容为prompt
-r 原样读取,不把反斜杠字符解析为转义字符
-s 静默模式,不会再屏幕上显示输出
-t seconds 设置超时时间,单位秒,没在指定时间输入完成,非0状态退出,读取失败
-u fd 使用文件描述符fd作为输入源,而不是标准输入,类似重定向
  • 只读取一个字符
#!/bin/bash
read -n 1 -p "Enter a char " char
printf "\n"
echo $char

exit

用来退出当前shell进程,并返回一个退出状态;使用$? 可以接收返回状态。
exit 不指定默认0,一般0成功,非0表示执行失败。

#!/bin/bash
echo "befor"
exit 8
echo "after"

declare 和typeset

它们的用法相同,都是用来设置变量的属性。 typeset 已经废弃。
命令语法

## -标识设置属性,+标识取消属性
declare [+/-] [aAfFgilpartux] [变量名=变量值]
  • aAfFgliprtux 都是具体的选项,含义如下
选项 含义
-f [name] 列出之前由用户在脚本中定义的函数名称和函数体
-F [name] 仅列出自定义的函数名称
-g name 在Shell函数内部创建局部变量
-p [name] 显示指定变量的属性和值
-a name 声明变量为普通数组
-A name 声明变量为关联数组(支持索引下标为字符串)
-i name 将变量定义为整数型
-r name[=value] 将变量定义为只读,等价readonly name
-x name[=value] 将变量设置为环境变量,等价于export name[=value]

例,

#!/bin/bash
declare -i m n ret
m=10
n=30
ret=$m+$n
echo $ret

shell 高级

  • 输入方向就是数据从哪里流向程序。默认从键盘,如果改变了流入就是输入重定向。
  • 输出方向就是数据从程序流向哪里,默认是显示器,如果改变了流出就是输出重定向。

linux中一切皆文件,包括标准输入设备和标准输出设备所有的计算机硬件都是文件。问了区分已经打开的文件,linux会给每个文件分配一个ID,这个ID是个整数,被称为文件描述符。

文件描述符 文件名 类型 硬件
0 stdin 标准输入文件 键盘
1 stdout 标准输出文件 显示器
2 stderr 标准错误输出文件 显示器
  • Linux Shell输出重定向

语法 fd>file 或 fd>>file ,fd文件描述符默认是1,和>或>> 不能有空格

类型 符号 作用
标准输出重定向 command >file 以覆盖方式,把command正确结果输出到file
- command >>file 以追加方式,把command正确结果输入到file
标准错误输出重定向 comand 2 >file 覆盖方式,错误信息输入到file
- command 2>>file 追加方式,错误信息输入到file
正确和错误信息同时保存 command >file 2>&1 覆盖方式,正确和错误信息同时保存到file
- command >>file 2>&1 追加方式,写入file
- command >file1 2>file2 覆盖方式正确写入file1,错误写入file2
- command >>file1 2>>file2 追加方式
  • /dev/null 文件

如果不想写入文件,也不想显示器展示,结果重定向到/dev/null。
/dev/null 当成linux 系统的垃圾箱,放到垃圾箱的数据不能恢复,丢弃。

  • linux shell 输入重定向
符号 说明
command 将file文件中的内容作为command的输入
command < 从标准输入中读取的数据,直到遇见分界符END才停止(分界符可自定义)
command file2 将file1作为command的输入,并将command结果输入到file2
  • 输入重定向举例,

逐行读取文件内容

#!/bin/bash
while read str: do
echo $str
done 

Shell 管道详解

将两个或多个命令(程序或者进程)连接到一起,把一个命令的输出作为下一个命令的输入,这种方式连接两个或多个命令就形成了管道(pipe)。

管道使用|连接多个命令,被称为管道符。语法如下

command1 | command2 [ | commandN...]

例,

mysqldump -u root -p '123456' wiki | gzip -9 |ssh username@remote_ip "cat >/backup/wikidb.gz"
  • 重定向和管道的区别

重定向操作符>将命令与文件连接起来,用文件来接收命令的输出,而管道符|是命令与命令连接起来,用第二命令符接收第一个。

  • 管道与输入重定向
command1 
  • 管道与输出重定向
command1 < input.txt | command2 > output.txt

过滤器

将几个命令通过管道符组合在一起就形成了管道,通常,这种方式使用的命令称为过滤器。

常用过滤器命令:

命令 描述
awk 用于文本处理的解释性程序设计语言,通常是被作为数据提取和报告工具
cut 用于将每个输入文件(如果没有指定文件,则标准输入)每一行的指定部分,输出的标准输出
grep 用于搜索一个或多个文件中匹配指定模式的行
tar 用于归档文件的应用程序
head 用于读取文件的开头部分(默认10行),没有指定文件,标准输入
paste 用于合并文件的行
sed 用于过滤和抓好文本的流编辑器
sort 用于对文本文件的行进行排序
split 用于将文件分割成块
strings 用于打印文件中可打印的字符串
tac 与cat命令相反,用于倒序的显示文件或链接文件
tail 用于显示文件的结尾部分
tee 用于从标准输入读取文件内容写入标准输出或文件
tr 用于转换或删除字符
uniq 用于报告或忽略重复的行
wc 用于打印文件中的总行数、单词数或字节数

在管道中使用awk命令

显示当前系统的总内存大小,单位为KB

free | grep Mem | awk '{print $2}'

cut命令

cut 命令用于文本处理,你可以使用这个命令来提取文本中指定内容。

查看系统登录shell是"/bin/bash"的用户名和对应用户主目录

grep "bin/bash" /etc/passwd | cut -d: -f1,6

grep 命令

查看日志文件中的错误信息

grep -i "error:" /var/log/messages | less

tar 命令

tar 命令是linux系统中最常用的打包文件程序
可以使用tar命令赋值一个目录的整体结构

tar cf - /home/larenzhang | (cd /backup/:  tar xf -)

head 命令

打印命令前几行输出,默认10行

ls /usr/bin | head -n 5

uniq 命令

uniq 命令用于报告或删除重复的行。
去掉输出中重复的行

sort testfile | uniq -c | sort -nr

wc命令

用于统计包含在文本流中的字符数、单次数和行数

统计当前登录到系统的用户数

who | wc -l

你可能感兴趣的:(shell常用命令二)