最常用的五个Shell

简介

Shell是一种命令行界面,它使用户可以与操作系统通信。它是一个程序,读取用户输入并执行命令。有几个Shell程序可用,每个程序都有自己的特点,功能和优点。在这篇博客文章中,我们将讨论由开发人员和系统管理员广泛使用的前五个Shell。

Bash

Bash是Linux和macOS上最流行和广泛使用的Shell程序。它是大多数Linux发行版的默认Shell程序,也可用于macOS。Bash代表“Bourne-Again SHell”,是由Brian Fox为GNU项目开发的原始Bourne shell(sh)的免费软件替代品。

image-20230815164305408

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具有先进的完成机制,允许用户快速完成命令,文件路径和选项。它还具有内置的拼写更正和自动更正机制,可帮助用户避免拼写错误和错误。

image-20230815164425842

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
# 定义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程序可以帮助您在工作中更加有效和高效。

posted @ 2023-08-15 16:47  寻梦99  阅读(229)  评论(0)    收藏  举报