㈠ linux中shell分多少种,都有什么区别
Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本,常见的脚本解释器有:
bash:是Linux标准默认的shell。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的缩写,内部命令一共有40个。
sh: 由Steve Bourne开发,是Bourne Shell的缩写,sh 是Unix 标准默认的shell。
另外还有:ash、 csh、 ksh等。
(1)linuxshbash扩展阅读:
常见的编程语言分为两类:一个是编译型语言,如:c/c++/java等,它们远行前全部一起要经过编译器的编译。另一个解释型语言,执行时,需要使用解释器一行一行地转换为代码,如:awk, perl, python与shell等。
Shell 经过了POSIX的标准化,所以它是可以在不同的linux系统上进行移植。
关于注释的问题: 在shell中使用#进行注释,注意,sh里面没有多行注释,只能每一行加一个#号;
㈡ linux下的shell是什么
什么是shell
shell是用户和Linux
操作系统
之间的
接口
。Linux中有多种shell,其中缺省使用的是Bash。本章讲述了shell的工作原理,shell的种类,shell的一般操作及Bash的
特性
。
什么是shell
Linux系统的shell作为操作系统的
外壳
,为用户提供使用操作系统的接口。它是
命令语言
、命令
解释程序
及
程序设计语言
的统称。
shell是用户和
Linux内核
之间的接口
程序
,如果把Linux内核想象成一个
球体
的中心,shell就是围绕
内核
的外层。当从shell或其他程序向Linux传递命令时,内核会做出相应的反应。
shell是一个命令语言
解释器
,它拥有自己内建的shell命令集,shell也能被系统中其他
应用程序
所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。
Shell是一种具备
特殊功能
的程序,
它是介于使用者和
UNIX/linux
操作系统之核心
程序(kernel)间的一个接口。为什么我们说
shell
是一种介于系统核心程序与使用者
间的中介者呢?读过操作系统概论的读者们都知道操作系统是一个
系统资源
的管理者与分
配者,当您有需求时,您得向系统提出;从操作系统的角度来看,它也必须防止使用者因
为错误的操作而造成系统的伤害?众所周知,对
计算机
下命令得透过命令(command)
或
是程序(program);程序有编译器(compiler)将程序转为
二进制代码
,可是命令呢?
其实shell
也是一支程序,它由
输入设备
读取命令,再将其转为计算机可以了解的机械码,
然后执行它。
各种操作系统都有它自己的
shell,以
DOS
为例,它的
shell
就是
command.com文
件。如同
DOS
下有
NDOS,4DOS,DRDOS
等不同的命令解译程序可以取代标准的
command.com
,UNIX
下除了
Bourne
shell(/bin/sh)
外还有
C
shell(/bin/csh)、
Korn
shell(/bin/ksh)、Bourne
again
shell(/bin/bash)、Tenex
C
shell(tcsh)
等其它的
shell。UNIX/linux将
shell
独立于核心程序之外,
使得它就如同一般的应用
程序,
可以在不影响操作系统本身的情况下进行修改、更新版本或是添加新的功能。
有一些命令,比如改变工作目录命令cd,是包含在shell
内部
的。还有一些命令,例如
拷贝
命令cp和移动命令rm,是存在于
文件系统
中某个目录下的单独的程序。对用户而言,不必关心一个命令是建立在shell内部还是一个单独的程序。
shell首先检查命令是否是
内部命令
,若不是再检查是否是一个应用程序(这里的应用程序可以是Linux本身的
实用程序
,如ls和rm,也可以是购买的商业程序,如xv,或者是
自由软件
,如emacs)。然后shell在搜索
路径
里寻找这些应用程序(搜索路径就是一个能找到可执行程序的目录列表)。如果键入的命令不是一个内部命令并且在路径里没有找到这个
可执行文件
,将会显示一条错误信息。如果能够成功找到命令,该内部命令或应用程序将被分解为
系统调用
并传给Linux内核。
shell的另一个重要特性是它自身就是一个解释型的程序设计语言,shell程序设计语言支持绝大多数在
高级语言
中能见到的程序
元素
,如
函数
、
变量
、
数组
和程序控制结构。shell
编程语言
简单易学,任何在提示符中能键入的命令都能放到一个可执行的shell程序中。
当普通用户成功登录,系统将执行一个称为shell的程序。正是shell进程提供了命令行提示符。作为默认值(TurboLinux系统默认的shell是BASH),对普通用户用“$”作提示符,对超级用户(root)用“#”作提示符。
一旦出现了shell提示符,就可以键入
命令名称
及命令所需要的
参数
。shell将执行这些命令。如果一条命令花费了很长的时间来运行,或者在屏幕上产生了大量的输出,可以从
键盘
上按ctrl+c发出中断
信号
来中断它(在正常结束之前,中止它的执行)。
当用户准备结束登录对话进程时,可以键入logout命令、exit命令或文件结束符(EOF)(按ctrl+d实现),结束登录。
㈢ Linux shell语言——dash和bash
自己写的一个while循环结构总是报错,纠结了一下午,各种查资料、改命令行,最后发现是ubuntu系统解释器的原因,脚本没有问题,换一下解释器就OK了。郁卒的要死……
什么是bash ?
Bash(GNU Bourne-Again Shell)是许多Linux平台的内定Shell,事实上,还有许多传统UNIX上用的Shell,像tcsh、csh、ash、bsh、ksh等等。
GNU/Linux 操作系统中的 /bin/sh 本是 bash (Bourne-Again Shell) 的符号链接,但鉴于 bash 过于复杂,有人把 bash 从 NetBSD 移植到 Linux 并更名为 dash (Debian Almquist Shell),并建议将 /bin/sh 指向它,以获得更快的脚本执行速度。Dash Shell 比 Bash Shell 小的多,符合POSIX标准。
Debian和Ubuntu中,/bin/sh默认已经指向dash,这是一个不同于bash的shell,它主要是为了执行脚本而出现,而不是交互,它速度更快,但功能相比bash要少很多,语法严格遵守POSIX标准。
就是这个倒霉的dash解释器使得我按照bash语法写的shell 脚本不能运行。
要知道自己的/bin/sh指向何种解释器,可以用 ls /bin/sh -al 命令查看:
$ ls /bin/sh -al
lrwxrwxrwx 1 root root 4 11月 16 15:33 /bin/sh -> bash
以上结果就表示当前系统用的是dash解释器。
切换到bash的方式其实挺简单的,关键是一直没找出这个原因……
修改默认的sh,可以采用命令 sudo dpkg-reconfigure dash
会出现一个图片状的配置菜单,选no就可以了
再次检查一下, ls /bin/sh -al 发现软链接指向/bin/bash
lrwxrwxrwx 1 root root 4 11月 16 15:33 /bin/sh -> bash
参考资料: Ubuntu 的 bash和dash的区别_Linux教程_Linux公社-Linux系统门户网站
感谢度娘!!
注:dash 和 bash 语法上的主要的区别有:
㈣ Linux中的sh命令的详细解释
linxu下的sh命令相当于是shell命令语言的解释器。下面由我为大家整理了linux的sh命令的详细解释的相关知识,希望对大家有帮助!
一、Linux中的sh命令的详细解释
sh命令是shell命令语言解释器,执行命令从标准输入读取或从一个文件中读取。通过用户输入命令,和内核进行沟通!Bourne Again Shell (即bash)是自由软件基金会(GNU)开发的一个Shell,它是Linux系统中一个默认的Shell。Bash不但与Bourne Shell兼容,还继承了C Shell、Korn Shell等优点。
语法
bash [options] [file]
选项
-c string:命令从-c后的字符串读取。
-i:实现脚本交互。
-n:进行shell脚本的语法检查。
-x:实现shell脚本逐条语句的跟踪。
二、Linux中的sh命令的具体例子
使用-x选项跟踪脚本调试shell脚本,能打印出所执行的每一行命令以及当前状态:
[root@AY1307311912260196fcZ satools]# sh -x check_ssh_login.sh
+ DEFINE=30
+ cat /var/log/secure
+ awk '/Failed/ {++ip[$(NF-3)]} END {for (i in ip) print i"="ip[i]}'
++ cat /root/satools/black.txt
+ for i in '`cat /root/satools/black.txt`'
++ echo 121.42.0.16=1427
++ awk -F= '{print $1}' + IP=121.42.0.16
++ echo 121.42.0.16=1427
++ awk -F= '{print $2}'
+ NUM=1427
+ '[' 1427 -gt 30 ']'
+ grep 121.42.0.16 /etc/hosts.deny
+ '[' 1 -gt 0 ']'
+ echo sshd:121.42.0.16
+ echo vsftpd:121.42.0.16
+ for i in '`cat /root/satools/black.txt`'
++ echo 121.42.0.72=276
++ awk -F= '{print $1}'
+ IP=121.42.0.72
++ awk -F= '{print $2}'
++ echo 121.42.0.72=276
+ NUM=276 + '[' 276 -gt 30 ']'
+ grep 121.42.0.72 /etc/hosts.deny
+ '[' 1 -gt 0 ']'
+ echo sshd:121.42.0.72
+ echo vsftpd:121.42.0.72
三、Linux中对.sh文件的操作命令
1、创建test.sh文件
touch test.sh
2、编辑sh文件
vi test.sh
3、保存退出
敲击esc, 然后输入 :wq ,回车退出
4、添加可执行权限,当然默认就是可执行的。
chmod +x test.sh
5、运行文件
(1)./test.sh
(2)sh test.sh
6、删除文件
rm test.sh
㈤ 10 分钟学会Linux常用 bash命令
显示所有的环境变量,如果你想获取某个变量的详细信息,使用 echo $VARIABLE_NAME .
Example:
whereis使用系统自动睁段构建的数据库来搜索可执行文件,源文件和手册页面。
Example:
它在环境变量PATH指定的目录中搜索可执行文件。此命令将打印可执行文件的完整路径。兄岩
Example:
清除窗口上的内容。
列出您的文件。 ls 有很多选项: -l 列出“长格式”的文件,其中包含文件的确切大小,拥有该文件的人员,有权查看该文件,以及何时进行上次修改。 -a 列出所有文件,包括隐藏文件。有关此命令的更多信息,请检查此链接。
Example:
创建或更新您的文件。
Example:
它可以在UNIX或Linux下用于以下目的。
显示文件的第一部分(用空格移动并键入q以退出)。
输出文件的前10行。
输出最后10行文件。用于-f在文件增长时输出附加数据。
将文件从一个位置移动到另一个位置。
filename1 文件的源路径, filename2 是目标路径。
将文件从一个位置复制到另一个位置。
filename1 文件的源路径, filename2 是目标路径。
删除文件。在目录上使用此命令会给您显示一个错误: rm: directory: is a directory 。 为了删除目录,你必须传递 -rf 去递归删除目录中的所有内容。
比较文件,并列出他们的差异。
让您更改文件的读取,写入和执行权限。
压缩文件。
解压缩gzip压缩的文件。
让你查看gzip压缩文件,而不需要gunzip它。
打印文件。
查看打印机队列。
Example:
从打印队列移除某些内容。
awk是处理文本文件最有用的命令。它一行一行地在整个文件上运行。默认情况下,它使用空格分隔字段。awk命令最常用的语法是
让我们采取以下文件 /etc/passwd 。以下是此文件包含的示例数据:
所以现在让我们从这个文件只获取用户名。 -F 指定在我们要基于哪个分隔字段。在我们的例子中 : 。 { print $1 } 意味着打印出第一个匹配字段。
运行上述命令后,您将获得以下输出。
有关如何使用 awk 的更多细节,请查看以下链悉尘誉接。
查找文件内的文本。您可以使用grep搜索与一个或多个正则表达式匹配的文本行,并仅输出匹配的行。
Example:
您还可以通过使用 -i 选项强制grep忽略单词大小写。 -r 可用于搜索指定目录下的所有文件,例如:
-w 只搜索单词。有关 grep 详细信息,请查看以下链接。
告诉你一个文件中有多少行,多少单词和多少字符。
Example:
7459 是行数, 15915 是单词数, 398400 是字符数.
用于过滤和转换文本的流编辑器。
example.txt
用连字符替换所有空格
使用"d"替换所有的数字
排序文本文件的行
example.txt
sort example.txt
随机化一个排序的example.txt
报告或省略重复的行
example.txt
只显示example.txt的唯一行(首先你需要排序,否则看不到重叠)
显示每行的唯一项,并告诉我找到了多少个实例
从每行文件中删除部分。
example.txt
显示第2,7和9栏的空格作为分隔符
显示一行文字
显示 "Hello World"
用字母之间的换行显示 "Hello World"
简单的最佳文本格式化程序
example: example.txt (1 line)
将example.txt的行输出为20个字符的宽度
翻译或删除字符
example.txt
把所有小写字母变成为大写
把所有的空格变成换行符
显示文件的行数
example.txt
带行号显示 example.txt
打印匹配模式的行 - 扩展表达式(别名为:'grep -E')
example.txt
在其中显示“Lorem”或“dolor”的行
打印匹配模式到的行 - FIXED模式匹配(别名为:'grep -F')
example.txt
在example.txt中找到具体的字符串'(Lorem | doloar)'
生成一个新的目录。
执行这个,从一个目录转移到另外一个目录。
将你移动到主目录。此命令接受可选的 dirname ,将你移动到该目录。
告诉你你目前所在的目录。
ssh (SSH client) 是一个用来在登录到远程机器并执行的命令的程序。
此命令还接受 -p 可用于连接到特定端口的选项。
返回当前登录用户名。
允许当前登录的用户更改其密码。
显示您的磁盘配额。
显示当前日期和时间。
显示月份的日历。
显示当前的正常运行时间。
显示谁在线
Displays information about user.
显示内核信息。
显示指定命令的手册。
显示磁盘使用情况。
显示文件名中文件和目录的磁盘使用情况( -s只给出一个总数)。
列出您最后登录的指定用户。
列出您的进程。
使用您所提供的ID杀死(结束)进程。
用名称杀死所有进程。
显示当前活动的进程。
列出停止的或后台工作的Job; 恢复在后台停止的Job。
前台化最近的Job。
Brings the most recent job in the foreground.
Pings主机并输出结果。
获取域的whois信息。
获取域的DNS信息。
下载文件。
在本地主机和远程主机之间或两台远程主机之间传输文件。
从本地主机复制到远程主机
从远程主机复制到本地主机
此命令还接受 -P 选项可用于连接到特定的端口。
在bash中你将编写第一行脚本文件,被叫做 shebang 。任何脚本中的这一行来确定脚本的执行能力,如独立的可执行文件,而不是在终端中预先键入sh,bash,python,php等。
Example:
上面的一行创建一个变量str并给它赋值“hello world”。通过 $ 放在变量名的开头来检索变量的值。
Example:
像其他语言一样,bash也有数组。数组是包含多个值的变量。数组的大小没有最大限制。bash中的数组为零。第一个元素被索引为元素0.在bash中创建数组有几种方法。以下给出了哪些。
Examples:
要在特定索引处显示值,请使用以下语法:
如果没有提供索引,则假定为数组元素0。要了解数组中有多少值,请使用以下语法:
Bash也支持三元条件。下面是一些例子。
检查一些关于如何操作字符串的语法
Example:
当您运行上述示例时,该hello函数将输出“world!”。上述两个功能 hello 和 say 是相同的。主要区别是功能 say 。此功能打印其接收到的第一个参数。函数内的参数以与给脚本的参数相同的方式进行处理。
bash中的条件语句与其他编程语言相似。条件有许多形式,如最基本的形式是 if 表达式 then 语句,其中语句只有在表达式为真时执行。
有时,如果条件变得混乱,所以你可以使用相同的条件 case statements 。
Expression Examples:
bash 中有三种不同类型的循环。 for , while 和 until .
for 语法:
while 语法:
until 语法:
bash_profile 可以通过运行后面的命令打开。 nano ~/.bash_profile
nano ~/.bashrc
source ~/.bashrc
cd hotellogs
您可以通过传递不同的选项来轻松地调试bash脚本bash。例如-n,不会运行命令并仅检查语法错误。-vecho命令在运行它们之前。-x命令行处理后的echo命令。
㈥ 在linux下 什么是bash.什么又是shell
bash 是一个为GNU项目编写的Unix shell,也就是linux用的shell。
Shell俗称壳(用来区别于内核),是指“提供使用者使用界面”的软件,就是一个命令行解释器。
BASH是SHELL的一种,是大多数LINUX发行版默认的SHELL,除BASH SHELL外还有C SHELL等其它类型的SHELL。
linux主要特性:
1,基本思想:
Linux的基本思想有两点:第一,一切都是文件;第二,每个软件都有确定的用途。其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。至于说Linux是基于Unix的,很大程度上也是因为这两者的基本思想十分相近。
2,完全免费:
Linux是一款免费的操作系统,用户可以通过网络或其他途径免费获得,并可以任意修改其源代码。这是其他的操作系统所做不到的。正是由于这一点,来自全世界的无数程序员参与了Linux的修改、编写工作,程序员可以根据自己的兴趣和灵感对其进行改变,这让Linux吸收了无数程序员的精华,不断壮大。
3,完全兼容POSIX1.0标准:
这使得可以在Linux下通过相应的模拟器运行常见的DOS、Windows的程序。这为用户从Windows转到Linux奠定了基础。许多用户在考虑使用Linux时,就想到以前在Windows下常见的程序是否能正常运行,这一点就消除了他们的疑虑。
4,多用户、多任务:
Linux支持多用户,各个用户对于自己的文件设备有自己特殊的权利,保证了各用户之间互不影响。多任务则是现在电脑最主要的一个特点,Linux可以使多个程序同时并独立地运行。
5,良好的界面:
Linux同时具有字符界面和图形界面。在字符界面用户可以通过键盘输入相应的指令来进行操作。它同时也提供了类似Windows图形界面的X-Window系统,用户可以使用鼠标对其进行操作。在X-Window环境中就和在Windows中相似,可以说是一个Linux版的Windows。