在linux下编写shell脚本文件时,经常会看到很多人在文件的第一行中标注“#!/bin/bash”。这句话的意思是告诉系统强制用bash,避免出现一些不兼容的问题。
那么,在linux系统中,除了bash之外,还有哪些shell工具?各自之间有什么区别?如何知道当前系统使用的是哪一个shell?彼此之间又如何进行转换呢?本文就来一一解答。
1、各类常用shell介绍
不同的shell具备不同的功能,shell还决定了脚本中函数的语法,linux中默认的shell是/bin/bash,流行的shell有ash、bash、ksh、csh、zsh等,不同的shell都有自己的特点以及用途。
- ash。ash Shell是由Kenneth Almquist编写的,是Linux 中占用系统资源最少的一个小Shell,它只包含24个内部命令,因而使用起来很不方便。
- bash。大多数Linux系统默认使用的shell,bash shell 是 Bourne shell 的一个免费版本,它是最早的 Unix shell,bash还有一个特点,可以通过help命令来查看帮助。包含的功能几乎可以涵盖shell所具有的功能,所以一般的shell脚本都会指定它为执行路径。
- csh。C shell 使用的是“类C”语法,csh是具有C语言风格的一种shell,其内部命令有52个,较为庞大。目前使用的并不多,已经被/bin/tcsh所取代。
- dash。小巧,符合 POSIX 标准,但是功能很少。不是给人交互时使用的。
- ksh。Korn shell 的语法与 Bourne shell 相同,同时具备了 C shell 的易用特点。许多安装脚本都使用 ksh ,ksh有42条内部命令,与bash相比有一定的限制性。
- tcsh。tcsh是csh的增强版,与 C shell 完全兼容。
- sh。是一个快捷方式,已经被/bin/bash所取代。
- zsh。zch是Linux 最大的Shell之一,由Paul Falstad完成,共有84 个内部命令。如果只是一般的用途,没有必要安装这样的Shell。
2、如何查询当前shell?
leon@Ubuntu:~$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 9月 11 11:14 /bin/sh -> bash
3、如何进行shell间的转换?
例如,使用下面的命令可以将系统缺省的shell指定为bash:
sudo ln -fs /bin/bash /bin/sh
或者, 也可以使用下面的命令完成从bash到dash的转换:
sudo dpkg-reconfigure dash
在弹出的对话框中选择“否”!