为什么说 zsh 是 shell 中的极品? 它相对与 bash,tcsh 等有什么优势呢?如果优势很突出的话可以直接只学 zsh 吗?
相比bash,zsh兼容bash,且有更灵活多样的配置、更强大的命令补全等,提供了更好的交互易用性;bash是绝大部分*nix系统的默认shell,是事实上的标准shell,我们通常所说的shell脚本其实指的是bash脚本,所以bash肯定是使用最广泛的主流shell,但若是你想要找一个既能兼容bash,又要比bash更强大的shell,那就只有zsh了。
然而,一方面zsh的可定制性非常强,另一方面也提高了使用门槛,因此zsh出现的早期,使用它的人并不多。后来,社区出现了很多zsh的颜色主题和插件项目,让我们可以快速上手;再后来还出现了 oh-my-zsh 这样的zsh主题和插件的集成项目,让zsh的使用门槛基本就消失了。
以下介绍一下我的zsh安装和配置步骤,让您在1分钟内就能拥有非常好用的zsh。
iterm2
(若您不是macOS用户,可忽略这部分内容,直接看下一节zsh的安装)。
macOS自带的终端不好用,iterm2比较漂亮,所以先装个iterm2替换它。
- 安装:brew install iterm2
- 设置iterm2为默认:iTerm2->选择【Make iTerm2 Default Term】。
- 设置配色: 进入 iTerm2->Preferences->Profiles->Colors,在【Color Presets】下拉框选择【Dark Background】,Cursor改为红色:
再进入【text选项卡】, Cursor设置为Box:
zsh
设置zsh为默认shell
macOS预装了zsh,输入”chsh -s /bin/zsh”即可将默认shell设置为zsh;
如果发现系统没有预装,您也可以用brew安装。
- 安装zsh,并设置为默认Shell
# 查看当前Shell,若返回值为/bin/zsh,则无需修改
echo $SHELL
# 查看可用shell
cat /etc/shells
# 若没有zsh,则安装
# macOS:
brew install zsh
# ubuntu:
apt install zsh
# 将默认shell设置为zsh
chsh -s /bin/zsh
- 让zsh加载bash配置:打开~/.zshrc,添加: source ~/.bash_profile
- oh-my-zsh安装: oh-my-zsh主要提供zsh的颜色主题(scheme)和各种功能插件的集成。那些主题和插件都是可以单独安装的,如果你知道你需要哪些主题和插件,并知道怎么安装它们,你也可以不需要oh-my-zsh。
# oh-my-zsh安装命令:
sh -c "$(curl -fsSL https://gitee.com/mirrors/oh-my-zsh/raw/master/tools/install.sh)"
zsh颜色主题设置
# 打开~/.zshrc,找到ZSH_THEME,改为自己想要设置的主题,默认是robbyrussel:
ZSH_THEME="robbyrussel"
iTerm2 改主题之后,可能会出现乱码的情况。需要安装Powerline字体来解决。
Powerline字体 Powerline 是 vim 的一个 statusline 插件,它为其他几个应用程序提供 statuslines 和提示,包括 zsh、bash、fish、tmux、IPython等。
Powerline字体仓库 提供了一些Powerline需要用到的字体。例如其中一个字体下载地址:Droid Sans Mono Slashed for Powerline.ttf,下载后双击即可安装。
然后打开iTerm2,打开Preferences配置界面,然后Profiles -> Text -> Font -> Chanage Font,选择 “Droid Sans Mono Slashed for Powerline” 字体。
zsh插件设置
~/.zshrc中找到plugins,将需要的插件添加到列表中,例如git是oh-my-zsh默认设置好的,另外再推荐设置几个有用的插件Z、sudo、tmux:
plugins=(
git
Z
tmux
sudo
)
- git: 提供了许多命令缩写(alias),例如输入ga,执行git add命令。使用这个插件需要先安装git: brew install git。
- Z: 使用z {path}用于跟踪您最常访问的目录,进行快速跳转。例如,假设您之前访问过目录 ~/.oh-my-zsh/plugins,后续输入 z pl就能进入~/.oh-my-zsh/plugins。
- tmux: 为tmux提供一些便捷指令(alias设置),例如输入tl,执行tmux list-sessions。使用这个插件需要先安装tmux: brew install tmux。
- sudo: 如果你执行一个命令,发现没有权限,那连按两次ESC即可为您当前或以前的命令添加sudo前缀。
其它插件
另外推荐几个有用的插件:zsh-syntax-highlighting、zsh-autosuggestions和zsh-autocomplete,它们未集成到oh-my-zsh,不能在plugins中直接添加,需要自行安装。
- zsh-syntax-highlighting: 语法高亮显示
# 安装
brew install zsh-syntax-highlighting
# 向.zshrc文件的plugins中添加插件调用:
echo "source $(brew --prefix)/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ~/.zshrc
source ~/.zshrc
- zsh-autosuggestions: 命令自动提示
# 安装
brew install zsh-autosuggestions
# 向.zshrc文件的plugins中添加插件调用:
echo "source $(brew --prefix)/share/zsh-autosuggestions/zsh-autosuggestions.zsh" >> ~/.zshrc
source ~/.zshrc
- zsh-autocomplete: Ctrl+R输入时的历史命令补全
# 安装
brew install zsh-autocomplete
# 向.zshrc文件的plugins中添加插件调用:
echo "source $(brew --prefix)/share/zsh-autocomplete/zsh-autocomplete.plugin.zsh" >> ~/.zshrc
source ~/.zshrc
- 强大的自动补全: zsh 提供了高度可定制和智能的自动补全功能,可以根据你的历史命令、路径、文件等进行预测性的补全,提高了命令行操作的效率。
- 主题和提示符: zsh 允许用户轻松定制命令提示符和主题,使命令行界面更具有个性化和可读性。
- 插件支持: zsh 支持丰富的插件系统,允许用户通过社区贡献或自定义插件来扩展功能,例如语法高亮、版本控制信息显示等。
- 丰富的内建命令和特性: zsh 提供了许多有用的内建命令和特性,例如通配符、数组操作、数学运算等,使得在命令行中更容易完成各种任务。
- 路径导航: zsh 具有强大的路径导航功能,允许用户通过模糊搜索、目录堆栈等方式轻松切换工作目录。
- 历史命令搜索: zsh 允许用户通过模糊搜索历史命令,快速找到并执行之前执行过的命令。
- 多语言支持: zsh 对于多种语言的本地化和国际化提供了支持,使得不同语言环境下的用户都能够方便地使用。
- 丰富的文档和社区支持: zsh 的文档相当详细,社区庞大活跃,用户可以轻松找到解决问题的方法并分享经验。
zsh还要配置 fish 直接用就可以了 当然不嫌烦zsh肯定比fish 香
22_Shell使用其他shell_Linux基础Shell篇
由于没有其他
Shell
的环境,只有
zsh
的,所以本章只讲
zsh
,还有一个
dash
不做了解
1. zsh shell
你可能会碰到的另一个流行的shell
是Z shell
(称作zsh
)。zsh shell
是由Paul Falstad
开发的一个开源Unix shell
。它汲取了所有现有shell
的设计理念并增加了许多独到的功能,为程序员创建了一个无所不能的高级shell
。
zsh shell
的一些独特的功能:
- 改进的
shell
选项处理 shell
兼容性模式- 可加载模块
zsh shell
提供了一组核心内建命令,并提供了添加额外命令模块(command module
)的能力。每个命令模块都为特定场景提供了另外一组内建命令,比如网络支持和高级数学功能。可以只添加你觉得有用的模块。
2. zsh shell
的组成
2.1 shell
选项
大多数shell
采用命令行参数来定义shell
的行为。zsh shell
使用了一些命令行参数来定义shell
的操作,但大多数情况下它用选项来定制shell
的行为。你可以在命令行上或在shell
中用 set
命令设置shell
选项。
zsh shell
命令行参数
参数 | 描述 |
---|---|
-c | 只执行指定的命令,然后退出 |
-i | 作为交互式shell启动,提供一个命令行交互提示符 |
-s | 强制shell从 STDIN读取命令 |
-o | 指定命令行选项 |
虽然这看起来像是一小组命令行参数,但-o
参数有些容易让人误解。它允许你设置shell
选项来定义shell
的功能。到目前为止,zsh shell
是所有shell
中可定制性最强的。你可以更改很多shell
环境的特性。不同的选项可以分成以下几大类。
- 更改目录:该选项用于控制
cd
命令和dirs
命令如何处理目录更改。 - 补全:该选项用于控制命令补全功能。
- 扩展和扩展匹配:该选项用于控制命令中文件扩展。
- 历史记录:该选项用于控制命令历史记录。
- 初始化:该选项用于控制
shell
在启动时如何处理变量和启动文件。 - 输入输出:该选项用于控制命令处理。
- 作业控制:该选项用于控制
shell
如何处理作业和启动作业。 - 提示:该选项用于控制
shell
如何处理命令行提示符。 - 脚本和函数:该选项用于控制
shell
如何处理shell
脚本和定义函数。 shell
仿真:该选项允许设置zsh shell
来模拟其他类型shell
行为。shell
状态:该选项用于定义启动哪种shell的选项。zle
:该选项用于控制zsh
行编辑器功能。- 选项别名:可以用作其他选项别名的特殊选项。
2.2 内建命令
- 核心内建命令
zsh shell
的核心包括一些你在其他shell
中已经见到过的基本内建命令。列出了可用的内建命令。
命令 | 描述 |
---|---|
alias | 为命令和参数定义一个替代性名称 |
autoload | 将shell函数预加载到内存中以便快速访问 |
bg | 以后台模式执行一个作业 |
bindkey | 将组合键和命令绑定到一起 |
builtin | 执行指定的内建命令而不是同样名称的可执行文件 |
bye | 跟 exit相同 |
cd | 切换当前工作目录 |
chdir | 切换当前工作目录 |
command | 将指定命令当作外部文件执行而不是函数或内建命令 |
declare | 设置变量的数据类型(同 typeset) |
dirs | 显示目录栈的内容 |
disable | 临时禁用指定的散列表元素 |
disown | 从作业表中移除指定的作业 |
echo | 显示变量和文本 |
emulate | 用zsh来模拟另一个shell,比如Bourne、Korn或C shell |
enable | 使能指定的散列表元素 |
eval | 在当前shell进程中执行指定的命令和参数 |
exec | 执行指定的命令和参数来替换当前shell进程 |
exit | 退出shell并返回指定的退出状态码。如果没有指定,使用最后一条命令的退出状态码 |
export | 允许在子shell进程中使用指定的环境变量名及其值 |
false | 返回退出状态码 1 |
fc | 从历史记录中选择某范围内的命令 |
fg | 以前台模式执行指定的作业 |
float | 将指定变量设为保存浮点值的变量 |
functions | 将指定名称设为函数 |
getln | 从缓冲栈中读取下一个值并将其放到指定变量中 |
getopts | 提取命令行参数中的下一个有效选项并将它放到指定变量中 |
hash | 直接修改命令哈希表的内容 |
history | 列出历史记录文件中的命令 |
integer | 将指定变量设为整数类型 |
jobs | 列出指定作业的信息,或分配给shell进程的所有作业 |
kill | 向指定进程或作业发送信号(默认为SIGTERM ) |
let | 执行算术运算并将结果赋给一个变量 |
limit | 设置或显示资源限制 |
local | 为指定变量设置数据属性 |
log | 显示受 watch 参数 ① 影响的当前登录到系统上的所有用户 |
logout | 同 exit ,但只在shell是登录shell时有效 |
popd | 从目录栈中删除下一项 |
显示变量和文本 | |
printf | 用C风格的格式字符串来显示变量和文本 |
pushd | 改变当前工作目录,并将上一个目录放到目录栈中 |
pushln | 将指定参数放到编辑缓冲栈中 |
pwd | 显示当前工作目录的完整路径名 |
read | 读取一行,并用IFS 变量将数据字段赋给指定变量 |
readonly | 将值赋给不能修改的变量 |
rehash | 重建命令散列表 |
set | 为shell设置选项或位置参数 |
setopt | 为shell设置选项 |
shift | 读取并删除第一个位置参数,然后将剩余的参数向前移动一个位置 |
source | 找到指定文件并将其内容复制到当前位置 |
suspend | 挂起shell的执行,直到它收到 SIGCONT信号 |
test | 如果指定条件为TRUE 的话,返回退出状态码0 |
times | 显示当前shell以及shell中所有运行进程的累计用户时间和系统时间 |
trap | 阻断指定信号从而让shell无法处理,如果收到信号则执行指定命令 |
true | 返回退出状态码0 |
ttyctl | 锁定和解锁显示 |
type | 显示shell会如何解释指定的命令 |
- 附加模块
模块 | 描述 |
---|---|
zsh/datetime | 额外的日期和时间命令及变量 |
zsh/files | 基本的文件处理命令 |
zsh/mapfile | 通过关联数组来访问外部文件 |
zsh/mathfunc | 额外的科学函数 |
zsh/pcre | 扩展的正则表达式库 |
zsh/net/socket | Unix域套接字支持 |
zsh/stat | 访问stat系统调用来提供系统的统计状况 |
zsh/system | 访问各种底层系统功能的接口 |
zsh/net/tcp | 访问TCP套接字 |
zsh/zftp | 专用FTP客户端命令 |
zsh/zselect | 阻塞,直到文件描述符就绪才返回 |
zsh/zutil | 各种shell实用工具 |
- 查看、添加和删除模块
zmodload
命令是zsh
模块的管理接口。你可以在zsh shell
会话中用这个命令查看、添加或删除模块。
zmodload
命令不加任何参数会显示zsh shell
中当前已安装的模块。
zmodload
不同的zsh shell
实现在默认情况下包含了不同的模块。要添加新模块,只需在zmodload
命令行上指定模块名称就行了。
zmodload zsh/zftp
不会有信息表明模块已经加载成功了。你可以再运行一下 zmodload
命令,新添加的模块会出现在已安装模块的列表中。
一旦加载了模块,该模块中的命令就成为了可用的内建命令。
% zftp open myhost.com rich testing1
Welcome to the myhost FTP server.
% zftp cd test
% zftp dir
01-21-11 11:21PM 120823 test1
01-21-11 11:23PM 118432 test2
% zftp get test1 > test1.txt
% zftp close
%
zftp
命令允许你直接在zsh shell
命令行操作完整的FTP
会话!你可以在zsh shell
脚本中使用这些命令,直接在脚本中进行文件传输。
要删除已安装的模块,用-u
参数和模块名。
zmodload -u zsh/zftp
% zftp
zsh: command not found: zftp
通常习惯将
zmodload
命令放进
$HOME/.zshrc
启动文件中,这样在
zsh
启动时常用的函数 就会自动加载。
3. zsh脚本编程
3.2 数学运算
- 执行计算
zsh shell
提供了执行数学运算的两种方法:
let
命令- 双圆括号
在使用let
命令时,你应该在算式前后加上双引号,这样才能使用空格。
let value1=" 4 * 5.1 / 3.2 "
echo $value1
注意,使用浮点数会带来精度问题。为了解决这个问题,通常要使用 printf
命令,并指定能正确显示结果所需的小数点精度。
printf "%6.3f\n" $value1
现在好多了! 第二种方法是使用双圆括号。这个方法结合了两种定义数学运算的方法。
value1=$(( 4 * 5.1 ))
(( value2 = 4 * 5.1 ))
printf "%6.3f\n" $value1 $value2
注意,你可以将双圆括号放在算式两边(前面加个美元符)或整个赋值表达式两边。两种方法输出同样的结果。 如果一开始没用 typeset
命令来声明变量的数据类型,那么zsh shell
会尝试自动分配数据类型。这在处理整数和浮点数时很危险。看看下面这个例子。
value1=10
value2=$(( $value1 / 3 ))
echo $value2
现在这个结果可能并不是你所期望的。在指定数字时没指定小数点后的位数的话,zsh shell
会将它们都当成整数值并进行整数运算。要保证结果是浮点数,你必须指定该数小数点后的位数。
value1=10.
value2=$(( $value1 / 3. ))
echo $value2
- 数学函数
在zsh shell
中,内建数学函数可多可少。默认的zsh
并不含有任何特殊的数学函数。但如果安装了zsh/mathfunc
模块,你就会拥有远远超出你可能需要的数学函数。
value1=$(( sqrt(9) ))
zsh: unknown function: sqrt
zmodload zsh/mathfunc
value1=$(( sqrt(9) ))
echo $value1
zsh
中支持很多数学函数。要查看
zsh/mathfunc
模块提供的所有数学函数的清单,可以参看
zsh
模块的手册页面。
3.2 结构化命令
zsh shell
为shell
脚本提供了常用的结构化命令:
if-then-else
语句for
循环(包括C
语言风格的)while
循环until
循环select
语句case
语句
zsh
中的每个结构化命令采用的语法都跟你熟悉的bash shell
中的一样。zsh shell
还包含了另外一个叫作 repeat
的结构化命令。 repeat
命令使用如下格式。
repeat param
do
commands
done
param
参数必须是一个数字或能算出一个数值的数学算式。 repeat
命令就会执行指定的命令那么多次。
#cat test1
#!/bin/zsh
# using the repeat command
value1=$(( 10 / 2 ))
repeat $value1
do
echo "This is a test"
done
3.3 函数
zsh shell
支持使用 function
命令或通用圆括号定义函数名的方式来创建自定义函数。
function functest1 {
> echo "This is the test1 function"
}
% functest2() {
> echo "This is the test2 function"
}
% functest1
This is the test1 function
% functest2
This is the test2 function
%
总结
文章知识内容摘自《Linux
命令行与shell
脚本编程大全》,边学边做。
此外有关Linux
的内容我都汇总在了如下文章中:
- Linux系列(Ubuntu平台)学习文章整理总目录
到本章为止,有关这本书的学习就结束了,虽然书中话有一些其他内容,比如介绍了一些有意思的脚本,写脚本的思路。但是基础的知识到这里已经差不多了,我学习Shell
脚本的目的,现在不是想写脚本,而是加强我对Linux
的认识和基础,在运维或是之后做项目的时候,能够看得懂,能自己去发现和解决问题。以我目前的水平,写不出什么好的脚本,但是学了基础之后,能够去分析脚本,解决问题,拓宽思路。
有关文章的原稿(markdonw
)会一起分享在上面的总目录中,有需要的可以下载,在本地当质料库,可以随时搜索,查阅。
ZSH!在 Windows 上使用 WSL+ZSH
1.安装WSL
关于如何安装 WSL
这里就不介绍了,大家可以去找找相关的教程,很多。最直接的就是去微软官方:https://learn.microsoft.com/en-us/windows/wsl/install
最简单的方法是从 Microsoft Store 安装 Ubuntu
2.ubuntu
在开始菜单中搜索Ubuntu
图标并打开终端(也可以使用Windows终端)
使用此命令更新包源列表并更新当前安装的所有包。
# wsl 中执行
sudo apt update && sudo apt upgrade
这可能需要一段时间,具体取决于需要更新的软件包数量。或者你可以更新以下 Ubuntu 默认的软件源为国内的清华源(https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/)。
3.install ZSH
Bash
是默认的 Ubuntu shell
,但 ZSH
因其生产力的提升而处于另一个联盟。因此,我们将通过 Bash
安装 ZSH
。
安装
sudo apt install zsh
验证安装的版本。
zsh --version
zsh 5.8.1 (x86_64-ubuntu-linux-gnu)
关闭并重新打开终端以使其生效
4. install zsh
安装
添加超能力zsh
安装Oh my zsh! 运行这个命令。
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
答案y
是更改默认外壳。
Time to change your default shell to zsh:
Do you want to change your default shell to zsh? [Y/n] y
字体
手动下载并安装Meslo Nerd 字体,以包含 Powerlevel10k
可能需要的所有字形和符号
复制文件夹.ttf
内的文件~/.fonts
。如果您还没有的话,请创建一个。
并运行这些命令:
sudo apt install fontconfig
fc-cache -fv
主题
有很多主题,但我最喜欢的是Powerlevel10k,因为它易于设置和使用,并且自定义功能强 。
git clone https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/themes/powerlevel10k
在~/.zshrc
文件中添加此附加配置
ZSH_THEME="powerlevel10k/powerlevel10k"
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(history)
POWERLEVEL9K_SHORTEN_DIR_LENGTH=1
export LS_COLORS="rs=0:no=00:mi=00:mh=00:ln=01;36:or=01;31:di=01;34:ow=04;01;34:st=34:tw=04;34:pi=01;33:so=01;33:do=01;33:bd=01;33:cd=01;33:su=01;35:sg=01;35:ca=01;35:ex=01;32:"
重新启动终端并输入p10k configure
来个性化配置。
插件
oh-my-zsh!有很多插件可以使用。建议探索这些选项并使用最适合您需求的选项。
我已经安装了很多与软件开发和其他相关的软件来添加更多功能。运行这些命令:
git clone https://github.com/zsh-users/zsh-autosuggestions.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/Pilaton/OhMyZsh-full-autoupdate.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/ohmyzsh-full-autoupdate
以上这些插件是必备插件,推荐安装使用,但是他默认不是 zsh 的插件,所以需要安装使用。zsh 默认的插件可以直接配置.zshrc
中的 plugin 中使用,并不需要安装。
现在编辑~/.zshrc
文件并将其添加到属性中plugins
(不要使用逗号作为分隔符),注意格式:
ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern cursor root line)
ZSH_HIGHLIGHT_PATTERNS=('rm -rf *' 'fg=white,bold,bg=red')
plugins=(
adb
command-not-found
extract
deno
docker
git
github
gitignore
history-substring-search
node
npm
nvm
yarn
volta
vscode
sudo
web-search
z
zsh-autosuggestions
zsh-syntax-highlighting
ohmyzsh-full-autoupdate
)
如果您使用 NVM,请注意遵循此配置以避免减慢 zsh 启动速度,并遵循此配置以加快 compinit
⚠ 如果您在之前的 ZSH 安装中完成了之前的包配置、别名定义或其他操作,~/.basrc
则需要将它们手动移动到~/.zshrc
.
4. 终端
要在 VSCode 和 Windows 终端中使用相同的终端,请遵循以下配置。
VS代码
将这些属性添加到用户setttings.json
,这些配置是新添加的:
{
...
+ "terminal.integrated.fontFamily": "MesloLGS NF",
+ "terminal.integrated.fontSize": 12,
+ "terminal.integrated.shellIntegration.enabled": true,
+ "terminal.integrated.defaultProfile.windows": "Git Bash",
+ "terminal.integrated.defaultProfile.linux": "zsh",
...
}
windows terminal 终端
将这些配置添加到 Ubuntu 选项中。如果你不知道如何打开windows terminal
配置,可以先去找找相关的文档:
{
"profiles": {
"defaults": {},
"list": [
"colorScheme": "Ubuntu-ColorScheme",
"cursorShape": "filledBox",
+ "font": {
+ "face": "MesloLGS NF",
+ "size": 10
+ },
"guid": "{57ff1822-68a9-4a3f-90c5-a55c8557df50}",
"hidden": false,
"icon": "https://assets.ubuntu.com/v1/49a1a858-favicon-32x32.png",
"name": "Ubuntu",
+ "commandline": "wsl",
+ "startingDirectory": "~/Developer"
},
]
}
}
折腾使你进步!!!
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/8078.html