19@shell解释器的交互式环境详解

1|0shell解释器交互式环境

1|1一、交互式环境介绍

启动操作系统后,linux系统会默认提供5个操作终端(multics=》unix=》。。。=》linux),可以用Ctrl + Alt + Fn(n=1,2,3,4,5...)快捷键切换,我们进入任意终端后输入账号密码登录用户后,就会执行该用户在/etc/passwd文件中指定的解释器程序,然后进入解释器的交互式环境

[root@hzl ~]# head -1 /etc/passwd root:x:0:0:root:/root:/bin/bash #最后一个字段就是指定的解释器程序

1|2二、什么是交互式环境

1)我们为解释器输入指令,解释器解释执行(调用操作系统接口执行)然后后给我们返回结果,这就叫交互 2)进入解释器交互式环境后普通用户的提示符是$,管理用户是# 3)shell命令的基本格式/语法格式:命令 选项 参数

1|3三、命令优先级(由高到底)

==> alias   ==> Compound Commands     ==> function       ==> build_in         ==> hash           ==> $PATH             ==> error: command not found 1# alias别名 可以用alias查看 可以用命令来制作:alias 别名="命令 选项 参数" 2# Compound Commands复合命令 复合命令指的是能够将一组命令封装到一个代码块里的命令,例如ifforwhile 3#function函数 4# build in内建命令 可以用type查看,或者用man builtin [root@hzl ~]# type cd cd 是 shell 内嵌 5# hash 当别名和内部命令都搜到不到命令时,会检索$PATH中的路径 [root@hzl ~]# sed -n 's/:/\n/gp' <<< $PATH /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /root/bin #但是$PATH中包含的路径太多了,而且每个路径中的可执行文件也很多,如果每次都要搜索每个路径下的所有可执行文件,显然是不明智的,为了减少$PATH的搜索,上一次搜索的内容能够被下一次执行重用,bash对从$PATH中搜索得出的外部命令建立一个hash表,用于缓存,这个缓存是会话级别独立拥有的.不可以对其他终端共享,因为每个用户的$PATH可能不同 [root@hzl ~]# hostname # 执行一次$PATH中的命令,linux系统就会将其缓存起来 hzl.xxx.com [root@hzl ~]# hash # 可以查看hash表的缓存 #命中 命令 2 /usr/bin/hostname 1 /usr/bin/sed 2 /usr/bin/man 1 /usr/bin/ls [root@hzl ~]# hash -r # 清空哈希表 [root@hzl ~]# hash hash: 哈希表为空 6# $PATH [root@hzl ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin ==========================优先级验证====================== ===========alias > Compound Commands > function========= #(1) 设置 [root@hzl ~]# alias if="ls -l" #添加别名 [root@hzl ~]# function if(){ > echo "123" > } #(2) 验证alias的优先级最高 [root@hzl ~]# if 总用量 12 -rw-r--r-x. 1 root root 44 813 19:36 1.sh -rw-r--r-x. 1 root root 44 813 19:36 2.sh -rw-r--r-x. 1 root root 44 813 19:37 3.sh #(3) 取消别名,验证复合命令优先级>function [root@hzl ~]# unalias if [root@hzl ~]# if # 执行的是复合命令而不是函数 > ===================function > buitin===================== #(1) 设置 [root@hzl ~]# function cd(){ > echo "自定义函数cd" > } [root@hzl ~]# [root@hzl ~]# type cd cd 是函数 cd () { echo "自定义函数cd" } #(2) 验证 [root@hzl ~]# cd #执行的是函数 自定义函数cd ===================buitin > hash > $PATH================= #(1)最开始hash表内是没有任何命令的,优先级:builtin > $PATH [root@hzl ~]# unset cd [root@hzl ~]# type cd cd 是 shell 内嵌 [root@hzl ~]# cat /usr/bin/cd #!/bin/sh echo "这是PATH内的一个cd脚本" [root@hzl ~]# chmod +x /usr/bin/cd [root@hzl ~]# cd # 执行的是内置命令,而不是$PATH下的脚本cd [root@hzl ~]# cp /usr/bin/cd /usr/bin/hahaha [root@hzl ~]# hahaha 这是PATH内的一个cd脚本 [root@hzl ~]# #(2)后来hash表中有命令,但它缓存的是$PATH中的命令,说白了,与$PATH都是一样的东西,内置命令的优先级肯定高于hash # (3) 优先级hash>$PATH [root@hzl ~]# hash -r [root@hzl ~]# hostname egon.xxx.com [root@egon ~]# hash 命中 命令 1 /usr/bin/hostname [root@hzl ~]# hostname egon.xxx.com [root@hzl ~]# hash # 缓存命中2次 命中 命令 2 /usr/bin/hostname

1|4四、bash的特性

1|01)交互式环境下:

命令和文件路径自动补全(使用tab键)

1|02)交互式环境下:

命令历史记录

#上下键翻阅 #!历史命令编号 #!命令前缀字符 #!$上一条命令的参数: ll -dl !$ #!!执行最后一条命令

1|03)别名功能

#alias、unalias、\命令

1|04)前后台作业:

&、nohup、c、z、bg %1、fg %1、kill %3、screen

# 示例1 sh-3.2# sleep 15 # ctrl+z暂停程序 ^Z [1]+ Stopped(SIGTSTP) sleep 15 sh-3.2# jobs [1]+ Stopped(SIGTSTP) sleep 15 sh-3.2# bg %1 # 后台运行 [1] sleep 15 & sh-3.2# jobs [1]+ Running sleep 15 & sh-3.2# fg %1 # 前台运行 sleep 15 sh-3.2# # 示例2: sh-3.2# cat a.sh sleep 15 && echo 123 sh-3.2# sh a.sh # 暂停 ^Z [1]+ Stopped(SIGTSTP) sh a.sh sh-3.2# bg %1 # 后台运行 [1] sh a.sh & sh-3.2# fg %1 # 前台运行,也可以kill %1杀死 sh a.sh 123

1|05)输入输出重定向:

0、1、2 \>、>>、2>、2>>、&>、 cat >file1 <<EOF

1|06)支持管道:|

1|07)一行连接多条命令

; :左边的命令执行无论是否成功都会执行右边 && :左边的命令执行成功才会执行右边 # make && make install | |:左边的命令执行失败才会执行右边 [ -d /home/egon ] || mkdir -p /home/egon

1|08)支持通配符操作

例如 : *、?、[]、\ 等


__EOF__

本文作者ଲ小何才露煎煎饺
本文链接https://www.cnblogs.com/zeny/p/15121508.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   ଲ小何才露煎煎饺  阅读(103)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示