最常用的五个Shell
简介
Shell是一种命令行界面,它使用户可以与操作系统通信。它是一个程序,读取用户输入并执行命令。有几个Shell程序可用,每个程序都有自己的特点,功能和优点。在这篇博客文章中,我们将讨论由开发人员和系统管理员广泛使用的前五个Shell。
Bash
Bash是Linux和macOS上最流行和广泛使用的Shell程序。它是大多数Linux发行版的默认Shell程序,也可用于macOS。Bash代表“Bourne-Again SHell”,是由Brian Fox为GNU项目开发的原始Bourne shell(sh)的免费软件替代品。

Bash具有许多有用的功能,包括:
- 历史记录和搜索: Bash可以轻松浏览和搜索之前执行的命令历史记录,使用Ctrl-r快捷键可以快速搜索命令历史记录。
 
history
- 命令行编辑: Bash允许用户在执行命令之前编辑它们,包括删除,移动和更改命令的字符。
 
# 移动光标
Ctrl-a # 移动光标到行首
Ctrl-e # 移动光标到行尾
Ctrl-b # 向后移动光标
Ctrl-f # 向前移动光标
# 编辑字符
Ctrl-d # 删除光标后的字符
Ctrl-h # 删除光标前的字符
Ctrl-k # 删除光标后的所有字符
Ctrl-u # 删除光标前的所有字符
- 作业控制: Bash允许用户在后台运行多个命令,并使用作业控制在它们之间切换。
 - # 运行命令 command # 使用sudo权限运行命令 sudo command # 使用管道运行多个命令 command1 | command2 | command3 # 在后台运行命令 command & # 使用作业控制管理命令 Ctrl-z # 将命令暂停并放入后台 jobs # 查看后台运行的命令 fg %1 # 将作业1切换到前台 bg %1 # 将作业1切换到后台
 - 自定义命令和别名: 用户可以创建自定义命令和别名,以提高他们的生产力。例如,用户可以将常用命令的别名设置为更短的单词。
 
# 定义别名
alias myalias='command'
# 定义函数
function myfunc() {
  command
}
- Shell脚本: Bash支持Shell脚本,使用户能够编写脚本来自动化任务和执行复杂操作。例如,用户可以编写脚本来备份文件或在系统上设置定期任务。
 
# 编写脚本
#!/bin/bash
command1
command2
# 运行脚本
chmod +x script.sh
./script.sh
Zsh
Zsh是Bourne shell(sh)的扩展版本,具有附加功能和功能。它高度可定制,支持插件和主题。Zsh具有先进的完成机制,允许用户快速完成命令,文件路径和选项。它还具有内置的拼写更正和自动更正机制,可帮助用户避免拼写错误和错误。

Zsh具有许多与Bash类似的功能,包括历史记录,命令行编辑和作业控制。但是,Zsh具有额外的功能,使其脱颖而出,例如支持全局搜索,允许用户在文件名中匹配模式,以及支持关联数组,允许用户以键值对的形式存储数据。Zsh还具有强大的脚本语言,使其成为编写Shell脚本的流行选择。
Zsh高度可定制,用户可以配置它以适合其需求。用户可以安装插件和主题以增强其Shell体验,并可以使用Oh My Zsh框架来管理其Zsh配置。
Zsh的扩展功能包括:
- 全局搜索和替换: Zsh提供了一个名为zle的框架,该框架允许用户在命令行中执行全局搜索和替换操作。
 
# 在所有文件中查找所有出现的“foo”并将其替换为“bar”
grep -rl foo . | xargs sed -i 's/foo/bar/g'
- 自动补全: Zsh的自动补全功能比Bash更为强大。它可以自动补全命令,文件名,路径名和选项,并且可以自定义补全规则。
 
# 自定义补全git命令的分支名称
_git_branch_names() {
  branches=($(git branch --format='%(refname:lstrip=2)'))
  _describe 'branches' branches
}
compdef _git_branch_names gb
- 
主题和插件: Zsh支持用户定义主题和插件,这样用户就可以根据自己的需求来定制Shell体验。
 - 
安装主题和插件:
 - 
# 安装oh-my-zsh主题 sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" # 安装zsh-syntax-highlighting插件 git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting
 - 
命令别名和函数: Zsh允许用户定义别名和函数,以便执行常用命令或自定义操作。
 
# 定义alias
alias ll='ls -lh'
# 定义函数
function g() {
  git $@
}
- 关联数组: Zsh支持关联数组,这使得用户可以使用键值对的形式存储和访问数据。
 - 使用关联数组:
 - # 定义关联数组 typeset -A fruit_color fruit_color=( apple red banana yellow cherry red ) # 访问关联数组 echo "The color of an apple is ${fruit_color[apple]}"
 - 多行编辑: Zsh允许用户在命令行中编辑多行文本,这对于编写复杂的命令和脚本非常有用。
 
以下是一些具体的例子:
# 开始多行编辑模式
vared my_variable
# 使用Ctrl-d退出编辑模式
Fish
Fish代表友好交互式Shell,并且名副其实。Fish具有用户友好的界面,具有语法高亮,自动建议和易于记忆的命令。它具有独特的脚本语言,并支持交互式和非交互式模式。Fish还具有内置的帮助系统,提供有用的信息和Shell命令的示例。
Fish旨在易于使用,注重用户体验。它具有语法高亮,使命令易于阅读和理解,并具有自动建议,为完成命令和文件路径提供建议。Fish还具有独特的脚本语言,旨在比其他Shell脚本语言更加用户友好。
Fish也高度可定制,用户可以安装插件和主题以增强其Shell体验。Fish还具有内置的帮助系统,提供有用的信息和Shell命令的示例。
Fish是一款用户友好的Shell程序,具有语法高亮、自动建议和易于记忆的命令等特点。下面是一些具体的例子:
- 语法高亮: Fish具有语法高亮功能,可以使命令易于阅读和理解。
 
# 高亮ls命令的输出
ls --color=always
- 自动建议: Fish可以为用户提供建议,以帮助他们完成命令和文件路径。
 
# 完成命令
git ch
# 完成文件路径
cd /u/l/b
- 命令别名和函数: Fish允许用户定义别名和函数,以便执行常用命令或自定义操作。
 
# 定义alias
alias ll='ls -lh'
# 定义函数
function g() {
  git $@
}
- 插件和主题: Fish支持用户安装插件和主题,以增强其Shell体验。
 
# 安装fisherman插件管理器
curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs <https://git.io/fisher>
# 安装bobthefish主题
fisher add oh-my-fish/theme-bobthefish
- 脚本语言: Fish具有独特的脚本语言,旨在比其他Shell脚本语言更加用户友好。
 
# 编写脚本
#!/usr/bin/env fish
for file in *.*
  echo $file
end
# 运行脚本
chmod +x script.fish
./script.fish
PowerShell
PowerShell是由Microsoft为Windows操作系统开发的Shell程序。它具有丰富的功能,并支持面向对象的编程概念。PowerShell高度可定制,支持模块,插件和脚本。它还具有强大的脚本语言,允许用户自动化复杂任务。
owerShell是作为Windows命令提示符的替代品开发的,它具有有限的功能,不适合自动化。PowerShell具有类似于基于Unix的Shell的命令行界面,但它还支持面向对象的编程概念,使其成为Windows系统管理员的流行选择。
以下是一些PowerShell的具体例子:
- 列出当前目录下的所有文件:
 - Get-ChildItem
 - 列出当前目录下的所有文件,并按文件大小排序:
 - Get-ChildItem | Sort-Object Length -Descending
 - 列出当前目录下的所有文件,并按最后修改时间排序:
 - Get-ChildItem | Sort-Object LastWriteTime -Descending
 - 创建一个新的文件夹:
 - New-Item -ItemType Directory -Path "C:\\NewFolder"
 - 复制一个文件到另一个位置:
 - Copy-Item "C:\\OldFolder\\file.txt" -Destination "C:\\NewFolder\\file.txt"
 - 重命名一个文件:
 - Rename-Item "C:\\OldFolder\\file.txt" -NewName "newfile.txt"
 - 删除一个文件:
 - Remove-Item "C:\\OldFolder\\file.txt"
 - 在Windows计划任务中创建一个新任务:
 - New-ScheduledTaskTrigger -Daily -At "8:00 AM" | Register-ScheduledTask -TaskName "MyTask" -Action "C:\\MyScript.ps1"
 - 列出所有正在运行的进程:
 - Get-Process
 - 列出所有正在运行的进程,并按CPU使用率排序:
 - Get-Process | Sort-Object CPU -Descending
 - 列出所有正在运行的服务:
 - Get-Service
 - 启动一个服务:
 - Start-Service -Name "MyService"
 - 停止一个服务:
 - Stop-Service -Name "MyService"
 - 列出所有可用的驱动器:
 - Get-PSDrive
 - 列出所有可用的网络共享:
 - Get-SmbShare
 - 列出所有可用的网络连接:
 - Get-NetAdapter
 - 列出所有可用的IP地址:
 - Get-NetIPAddress
 - 列出所有可用的Windows更新:
 - Get-WindowsUpdate
 - 安装一个Windows更新:
 - Install-WindowsUpdate -KBArticleID "1234567"
 
Tcsh
Tcsh是C shell(csh)的增强版本,具有附加功能和功能。它具有先进的命令行编辑,历史记录和作业控制机制。Tcsh还支持别名,变量和命令行完成。它在基于Unix的系统上被开发人员和系统管理员广泛使用。
Tcsh具有许多与Bash和Zsh类似的功能,包括历史记录,命令行编辑和作业控制。但是,Tcsh具有额外的功能,例如支持命令行完成,允许用户快速完成命令,文件路径和选项。Tcsh还支持别名,允许用户为常用命令定义快捷方式。
以下是Tcsh的一些具体例子:
- 命令别名: 用户可以使用alias命令定义命令别名,以便更快地执行常用命令。例如,用户可以将常用的ls命令的别名设置为ll。
 
# 定义别名
alias ll 'ls -lh'
- 变量: Tcsh支持变量,允许用户存储和访问数据。用户可以使用set命令设置变量的值,并使用$符号访问变量的值。
 
# 设置变量
set myvar = "Hello World"
# 访问变量的值
echo $myvar
- 命令行完成: Tcsh支持命令行完成,允许用户快速完成命令,文件路径和选项。用户可以使用Tab键自动完成命令或选项,并使用Ctrl-d删除不需要的内容。
 
# 自动完成命令
ls -l /u/l<tab>
# 自动完成选项
ls -<tab>
# 删除不需要的内容
ls -l /u/lCtrl-d
- 作业控制: Tcsh允许用户在后台运行多个命令,并使用作业控制在它们之间切换。用户可以使用Ctrl-z将命令暂停并将其放入后台,然后使用fg命令将其切换回前台。
 
# 运行命令
command
# 将命令放入后台
Ctrl-z
# 查看后台运行的命令
jobs
# 将命令切换到前台
fg %1
- 其他功能: Tcsh还支持命令行编辑,历史记录,别名,变量和命令行完成等其他功能,使其成为Unix系统上广泛使用的Shell程序之一。
 
结论
总之,Shell程序是开发人员和系统管理员的必备工具。它们提供了一个命令行界面,允许用户与操作系统通信并有效地执行命令。Bash,Zsh,Fish,PowerShell和Tcsh是工业界广泛使用的顶级Shell程序之一。每个程序都具有自己独特的功能和功能,满足不同用户的需求和偏好。无论您是初学者还是高级用户,都有一个Shell程序可以帮助您在工作中更加有效和高效。
                
            
        
浙公网安备 33010602011771号