Linux下的各种shell
好多贝壳啊

安装完linux要干什么? 当然是美化一下终端啦

FIsh

fish is a smart and user-friendly command line shell for Linux, macOS, and the rest of the family.

我接触到的第一个shell,自带语法高亮和自动补全这两项神器,如果你不嫌弃默认的主题的话,fish可以说是开箱即用

安装

ubuntu环境下,使用apt命令进行安装

1
sudo apt install fish

安装完成后直接输入fish即可进入,默认会有一段欢迎语,如果不喜欢,可以用fish -c "set -U fish_greeting"来关闭

如果想要设置为默认的shell,则需使用chsh -s $(which fish)进行设置

主题

安装完成后当然要再装一个主题除非你喜欢默认

这里我们使用oh-my-fish来安装主题

1
2
curl -L github.com/oh-my-fish/oh-my-fish/raw/master/bin/install | fish
omf help

完成后输入omf,在fish下,如果命令是绿色的,那就是安装成功了,否则检查是否安装成功

输入omf theme即可查看能够安装的主题,以fox主题为例,下列是omf的使用方法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
omf theme  #列出主题

omf install fox #安装fox主题

omf theme fox  #更换fox主题

omf doctor  #自检

omf destroy  #卸载

omf update #更新

如需安装更多主题请看小贝塔,里面把所有的主题样式都展示出来

别名

fish自带了la也就是ls -A的别名,能更方便我们查看

Zsh

Zsh is a shell designed for interactive use, although it is also a powerful scripting language. Many of the useful features of bash, ksh, and tcsh were incorporated into zsh; many original features were added.

zsh对于bash的兼容性要好很多,相对的,想要配置zsh对比fish也要难

安装

同样,使用apt命令安装

1
sudo apt install zsh

不同的是,zsh安装下一次启动终端时会弹出配置界面,使用和数字键选择即可完成配置

主题

因为omz会拖慢zsh的速度,所以我们不选用omz来配置

这里以p10k主题为例;需要注意的是,因为p10k使用一部分的emoji图标,所以要想完美的显示最好安装nerd字体

不想安装或已经安装完成的小伙伴可以跳过这一步 依据github上的文档,下载这四个字体文件,并分别双击安装,然后在终端的首选项里选择nerd字体即可

MesloLGS NF Regular.ttf

MesloLGS NF Bold.ttf

MesloLGS NF 斜体.ttf

MesloLGS NF Bold Italic.ttf

安装完字体就可以正式开始安装p10k主题

1
2
git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ~/powerlevel10k
echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc

使用以上命令即可完成安装 使用exec zsh重新启动zsh,完成后即可看到p10k的配置界面,按照提示,完成配置即可

插件

因为zsh默认没有语法高亮和自动补全,所以需要两个插件来实现

语法高亮

使用zsh-syntax-highlighting这个插件来实现高亮

1
2
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git
echo "source ${(q-)PWD}/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ${ZDOTDIR:-$HOME}/.zshrc

使用以上两条命令安装插件

1
source ./zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

开启插件

自动补全

使用[zsh-autosuggestions](git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions )这一个插件实现

1
git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions

可能有细心的小伙伴发现,对语法高亮,自动补全貌似少了一条命令,因为自动补全没有将插件echo.zshrc配置文件中,会导致重启终端后不启动插件,需要手动执行source命令开启,而语法高亮因为echo.zshrc中,所以会跟着zsh一同启动

我们可以手动添加一条命令到.zshrc

1
2
echo "source ${(q-)PWD}~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh" >> ${ZDOTDIR:-$HOME}/.zshrc
    #                  ~/ 插件文件夹 / 插件.zsh               >>>写入到.zshrc                    

修改完成后执行

1
source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh

多重启几次终端,查看是否开启自动补全,如果重启没有自动补全,则需要检查上面的echo命令的路径是否是你插件的位置

别名

zsh默认是没有带任何别名的,我们要去.zshrc中自行配置,zsh的配置文件在/home/username/.zshrc

1
2
3
alias la='ls -A'
alias ll='ls -alF'
alias l='ls -CF'

即可设置别名,也可以仿照上面的格式自定义

Bash

This is an sh-compatible shell that incorporates useful features from the Korn shell (ksh) and the C shell (csh)

这是debian和众多发行版默认的shell,也是作者正在用的shell 用回zsh了,p10k真香

因为zsh和fish对bash的不兼容,使我在打包AnyKernel3的时候需要手动添加一行命令到.zshrc,以我的性格肯定不能忍,于是我就想有没有一种既对bash兼容性好,又方便易用的解决方案

语法

因为脚本大多用的解释器都是bash,所以学习了下bash的语法

  • 脚本解释器
1
#!/bin/bash
  • 变量
1
2
3
4
5
a=1 
b=2 
c=$(($a+$b)) 

echo $c

输出结果为3

  • 环境变量 使用export命令
1
export ABC=/usr/local/abc #重启终端后失效
  • 逻辑运算 &&与运算,需要同时为True

||或运算,其中一个为True

  • if语句
1
2
3
4
 if [ 条件 ];then
        command
        ...
    fi #以fi结尾
  • for语句
1
2
3
4
5
for arg in [list];do 
    command1
    command2
    ...
done

不要忘了do前的;

  • while语句
1
2
3
4
5
while [ condition ];do
    command1
    command2
    ...
done
  • until循环
1
2
3
4
5
until condition;do # 条件为false则进入循环
    command1
    command2
    ...
done
  • 函数

使用function定义一个函数

1
2
3
4
5
6
function func_name(){ 
    command1
    command2
    ...
    [return value]
}

可直接使用函数名调用函数,例如

1
2
3
4
5
function helloworld(){
    echo "Hello World"
}

helloworld

将在屏幕输出HelloWorld

  • sed命令

作用是找到并替换文本,如

1
sed -i "s/world/hugo/g" helloworld.sh #将helloworld.sh中的world全部替换成hugo  

Starship

  1. 这是一个以兼容性优先,使用Rust编写,高度自定义的命令的提示符
  2. 它可以用于各种shell,包括常见的Bash/zsh/fish等,所以基本不存在兼容性问题,又能得到美丽的终端
  3. 自带自动补全和语法高亮 需要shell支持,开箱即用,安装简单,对小白极其友好

安装

starship的安装十分简单,只需要执行

1
curl -sS https://starship.rs/install.sh | sh

即可完成安装,之后你需要在.bashrc里开启starship 在.bashrc的最后,添加以下内容

1
eval "$(starship init bash)"

重启终端,即可看到starship的默认样式

进阶

如果不满意默认的主题,可以使用以下命令创建配置

1
mkdir -p ~/.config && touch ~/.config/starship.toml

修改配置请看 https://starship.rs/config/ 预设里还能找到别人的主题配置

PS1

在用了一段时间的starship后,可能会有小伙伴发现,打开多文件的文件夹会比较卡顿,路径有时会折叠

于是我果断卸载,改用最简单粗暴的方式,直接修改PS1变量 PS1的含义太多了,这里就不全列出来

\u 用户名
\n 换行
\w 绝对路径
\W 路径的最后一个文件夹
\t 24小时制时间
\T 12小时制
$ root用户为#,普通$
\h 主题名
\d 日期

你也可以设置颜色

30m 黑色
31m 红色
32m 绿色
33m 黄色
34m 蓝色

更多变量和颜色请看

官方文档

CSDN

除此之外,还可以使用一些其他的符号和文字美化,例如 > /~/abc/./+等都可以,也可以使用表情

我现在用的是CSDN里找的ParrotOS风格

1
PS1='\[\033[0;31m\]\342\224\214\342\224\200$([[ $? != 0 ]] && echo "[\[\033[0;31m\]\342\234\227\[\033[0;37m\]]\342\224\200")[\[\033[0;39m\]\u\[\033[01;33m\]@\[\033[01;96m\]\h\[\033[0;31m\]]\342\224\200[\[\033[0;32m\]\w\[\033[0;31m\]]\n\[\033[0;31m\]\342\224\224\342\224\200\342\224\200\342\225\274 \[\033[0m\]\[\e[01;33m\]\$ \[\e[0m\]'

ps1来自csdn@Jiuh-star,侵联删

因为$和命令贴的太近,于是在 $和"[\e[0m]]“中间加了一个空格

参考

一文掌握shell脚本的基本语法


Last modified on 2023-08-19