Shell

学习 Shell 脚本编程的免费资源

学习 Shell 脚本编程的免费资源

你想学习 shell 脚本编程吗?或者你想提升现有的 bash 知识?我收集了以下免费的资源来帮助你学习 shell 脚本编程。
怎样用 Bash 编程:语法和工具

怎样用 Bash 编程:语法和工具

让我们通过本系列文章来学习基本的 Bash 编程语法和工具,以及如何使用变量和控制运算符,这是三篇中的第一篇。
Elvish Shell 速览

Elvish Shell 速览

过去这些年已经有一些新的 shell 出现来解决 Bash 中的一些缺点。Elvish 就是其中之一,我们将在今天讨论它。
Shell 脚本编程陷阱

Shell 脚本编程陷阱

随着代码量的增加,你的脚本会变得越来越难以维护,但你也不会想用别的语言重写一遍,因为你已经在这个 shell 版上花费了很多时间。
Windows 下 Emacs 中的 zsh shell

Windows 下 Emacs 中的 zsh shell

运行跨平台 shell(例如 Bash 或 zsh)的最大优势在于你能在多平台上使用同样的语法和脚本。在 Windows 上设置(替换)shell 挺麻烦的,但所获得的回报远远超出这小小的付出。
Bash 5.0 发布及其新功能

Bash 5.0 发布及其新功能

第五个版本侧重于新的 shell 变量和许多重大漏洞修复。它还引入了一些新功能,以及一些与 bash-4.4 不兼容的更改。
Linux 工具:点的含义

Linux 工具:点的含义

Paul Brown 解释了 Linux shell 命令中那个不起眼的“点”的各种意思和用法。
如何在 Linux Shell 编程中定义和使用函数

如何在 Linux Shell 编程中定义和使用函数

函数是一段可复用的代码。我们通常把重复的代码放进函数中并且在不同的地方去调用它。库是函数的集合。我们可以在库中定义经常使用的函数,这样其它脚本便可以不再重复代码而使用这些函数。
在 Fedora 系统上设置 zsh

在 Fedora 系统上设置 zsh

对于一些人来说,终端可能会很吓人。但终端不仅仅是一个输入的黑屏。它通常运行一个 shell(外壳),如此称呼的原因是它围绕着内核。
如何列出所有的 Bash Shell 内置命令

如何列出所有的 Bash Shell 内置命令

shell 内置命令就是一个命令或一个函数,从 shell 中调用,它直接在 shell 中执行。 bash shell 直接执行该命令而无需调用其他程序。
如何在 Linux 上安装友好的交互式 shell:Fish

如何在 Linux 上安装友好的交互式 shell:Fish

Fish 有着很多重要的功能,比如自动建议、语法高亮、可搜索的历史记录(像在 bash 中 CTRL+r)、智能搜索功能、极好的 VGA 颜色支持、基于 web 的设置方式、完善的手册页和许多开箱即用的功能。
shell 脚本之始

shell 脚本之始

像它的名字那样,shell 脚本就是一行一行你想让你的计算机执行的语句,就像你手动的一样。
如何将 Linux 命令的输出赋值给变量

如何将 Linux 命令的输出赋值给变量

有些时候,你可能想要将某个命令的输出内容存储在一个变量中,以待在后续操作中取出来使用。这对于 shell 脚本编程是特别有用的。
使用 Python 创建你自己的 Shell (上)

使用 Python 创建你自己的 Shell (上)

我很想知道一个 shell (像 bash,csh 等)内部是如何工作的。于是为了满足自己的好奇心,我使用 Python 实现了一个名为 yosh (Your Own Shell)的 Shell。
Linux 有问必答:如何知道当前正在使用的 shell 是哪个?

Linux 有问必答:如何知道当前正在使用的 shell 是哪个?

问题: 我经常在命令行中切换 shell。是否有一个快速简便的方法来找出我当前正在使用的 shell 呢?此外,我怎么能找到当前 shell 的版本? 找到你当前正在使用的 Shell 版本 有多种方式可以查看你目前在使用什么 shell,最简单的方法就是通过使用 shell 的特殊参数。 其一,一个名为 "$$" 的特殊参数 表示当前你正在运行的 shell 实例的 PID。此参数是只读的,不能被修改。所以,下面的命令也将显示你正在运行的 shell 的名字: $ ps -p $$ PID TTY TIME CMD 21666 pts/4 00:00:00 bash 上述命令可在所有可用的 shell 中工作。 如果你不
修复 Shell 脚本在 Ubuntu 中的默认打开方式

修复 Shell 脚本在 Ubuntu 中的默认打开方式

当你双击一个脚本(.sh文件)的时候,你想要做的是什么?通常的想法是执行它。但是在Ubuntu下面却不是这样,或者我应该更确切地说是在Files(Nautilus)中。你可能会疯狂地大叫运行文件,运行文件,但是文件没有运行而是用Gedit打开了。 我知道你也许会说文件有可执行权限么?我会说是的。脚本有可执行权限但是当我双击它的时候,它还是用文本编辑器打开了。我不希望这样,如果你遇到了同样的问题,我想你也许也想要这样。 我知道你或许已经被建议在终端下面执行,我知道这个可行,但是这不是一个在GUI下不能运行的借口是么? 这篇教程中
FISH:Linux 下的一个智能易用的 Shell

FISH:Linux 下的一个智能易用的 Shell

FISH(friendly interactive shell)是一个用户友好的命令行 shell,主要是用来进行交互式使用。shell 就是一个用来执行其他程序的程序。 FISH 特性 自动建议 fish 会根据你的历史输入和补完来提供命令建议,就像一个网络浏览器一样。注意了,就是Netscape Navigator 4.0! 漂亮的VGA 色彩 fish 原生支持 term256, 它就是一个终端技术的艺术国度。 你将可以拥有一个难以置信的、256 色的shell 来使用。 理智的脚本 fish 是完全可以通过脚本控制的,而且它的语法又是那么的简单、干净,而且一致。你甚至不需要去重写。 基于 web 的配置
轻松使用“Explain Shell”脚本来理解 Shell 命令

轻松使用“Explain Shell”脚本来理解 Shell 命令

我们在Linux上工作时,每个人都会遇到需要查找shell命令的帮助信息的时候。 尽管内置的帮助像man pages、whatis命令有所助益, 但man pages的输出非常冗长, 除非是个有linux经验的人,不然从大量的man pages中获取帮助信息是非常困难的,而whatis命令的输出很少超过一行, 这对初学者来说是不够的。 在Linux Shell中解释Shell命令 有一些第三方应用程序, 像我们在Linux 用户的命令行速查表提及过的’cheat’命令。cheat是个优秀的应用程序,即使计算机没有联网也能提供shell命令的帮助, 但是它仅限于预先定义好的命令。 Jackson写了一小
LINUX 101: 让你的 SHELL 更强大

LINUX 101: 让你的 SHELL 更强大

在我们的关于 shell 基础的指导下, 得到一个更灵活,功能更强大且多彩的命令行界面 为何要这样做? 使得在 shell 提示符下过得更轻松,高效 在失去连接后恢复先前的会话 Stop pushing around that fiddly rodent! 这是我的命令行提示符的设置。对于这个小的终端窗口来说,这或许有些长。但你可以根据你的喜好来调整它。 作为一个 Linux 用户, 你可能熟悉 shell (又名为命令行)。 或许你需要时不时的打开终端来完成那些不能在 GUI 下处理的必要任务,抑或是因为你处在一个将窗口铺满桌面的环境中,而 shell 是你与你的 linux 机器交互的主
Linux 下如何处理包含空格和特殊字符的文件名

Linux 下如何处理包含空格和特殊字符的文件名

我们经常会看到文件名和文件夹名。大多数时候文件/文件夹的名字和内容相关并以数字和字母开头。字母加数字的文件名最常见,应用也很广泛,但总会需要处理一些包含特殊字符的文件名/文件夹名。 注意:我们可能有各种类型的文件,但是为了简单以及方便实现,在本文中我们只用文本文件(.txt)做演示。 最常见的文件名例子: abc.txt avi.txt debian.txt … 数字文件名例子: 121.txt 3221.txt 674659.txt … 字母数字文件名例子: eg84235.txt 3kf43nl2.txt 2323ddw.txt … 包含特殊字符的文件名的例子,并不常见: #232.txt #bkf.tx
Shell 脚本面试问题大全

Shell 脚本面试问题大全

我们为你的面试准备选择了 70 个你可能遇到的 shell 脚本面试问题及解答。了解脚本或至少知道基础知识对系统管理员来说至关重要,它也有助于你在工作环境中自动完成很多任务。在过去的几年里,我们注意到所有的 linux 工作职位都要求脚本技能。 1) 如何向脚本传递参数 ? ./script argument 例子 : 显示文件名称脚本 ./show.sh file1.txt cat show.sh #!/bin/bash cat $1 2) 如何在脚本中使用参数 ? 第一个参数 : $1,第二个参数 : $2 例子 : 脚本会复制文件(arg1) 到目标地址(arg2) ./copy.sh file1.txt /tmp/ cat copy.sh #!/bin/bash
Shell脚本编程初体验

Shell脚本编程初体验

通常,当人们提到shell脚本语言时,浮现在他们脑海中是bash,ksh,sh或者其它相类似的linux/unix脚本语言。脚本语言是与计算机交流的另外一种途径。使用图形化窗口界面(不管是windows还是linux都无所谓)用户可以移动鼠标并点击各种对象,比如按钮、列表、选框等等。但这种方式在每次用户想要计算机/服务器完成相同任务时(比如说批量转换照片,或者下载新的电影、mp3等)却是十分不方便。要想让所有这些事情变得简单并且自动化,我们可以使用shell脚本。 某些编程语言,像pascal、foxpro、C、java之类,在执行前需要先进行编译。它们需
Shell入门:掌握Linux,OS X,Unix的Shell环境

Shell入门:掌握Linux,OS X,Unix的Shell环境

在Linux或类Unix系统中,每个用户和进程都运行在一个特定环境中。这个环境包含了变量、设置、别名、函数以及更多的东西。下面是对Shell环境下一些常用命令的简单介绍,包括每个命令如何使用的例子,以及在命令行下设定你自己的环境来提高效率。 找出你当前的shell 在终端应用中输入下面命令中的任意一个: ps $$ ps -p $$ 或者 echo "$0" 输出范例: 图1:找出当前的shell 找出所有已安装的shell 找到已安装shell的完整路径: type -a zsh type -a ksh type -a sh type -a bash 输出范例: 图2:找出shell的路径 文件/etc/shells里
Linux有问必答:如何在脚本中获取进程ID(PID)

Linux有问必答:如何在脚本中获取进程ID(PID)

提问: 我想要知道运行中脚本子shell的进程id。我该如何在shell脚本中得到PID。 当我在执行shell脚本时,它会启动一个叫子shell的进程。作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为批处理进程)。 在某些情况下,你也许想要知道运行中的子shell的PID。这个PID信息可以在不同的情况下使用。比如,你可以使用shell脚本的PID在/tmp下创建一个唯一的临时文件。有时侯脚本需要检测所有运行的进程,它可以从进程列表中排除自身的子shell。 在bash中,子shell进程的PID存储在一个特殊的变量$$中。这个变量只读,
如何在shell脚本中使用变量

如何在shell脚本中使用变量

在每种编程语言中,变量都扮演了一个重要的角色。在Linux shell脚本编程中,我们使用两种类型的变量:系统定义的变量和用户定义的变量。 shell脚本中的变量是用来调用一个数值或者字符值的手段。与正规的编程语言不同的是,shell脚本不要求你去为变量声明一个类型。 在本文中,我们将讨论shell脚本编程中的变量及其类型,以及如何设置和使用这些变量。 系统定义的变量: 这些变量由操作系统(Linux)自身创建并维护,通常它们以大写字母定义,我们可以通过命令$ set来查看这些变量。下面列出了部分系统定义的变量: 系统定义的变量
如何在linux上分享你shell命令的输出

如何在linux上分享你shell命令的输出

前段时间我发布了一篇关于shelr.tv这个网站的文章,它提供一个服务允许你从网站上直接分享你的终端记录。现在shelr.tv这个网站似乎关闭了,然后我四处寻找是否有类似的网站,于是我发现了commands.com。从它的主页上来看,它的服务和其他网站提供的服务是类似的,因此让我们来测试它。步骤 1 – 在网站上注册
Linux:使用bash删除目录中的特定文件

Linux:使用bash删除目录中的特定文件

我是一名Linux新用户。现在我需要清理一个下载目录中的文件,其实我就是想从~/Download/文件夹删去除了以下格式的文件外所以其它文件: *.iso - 所有的iso格式的文件。 *.zip - 所有zip格式的文件。 我如何在一个基于Linux,OS X 或者 Unix-like 系统上的bash shell中删除特定的文件呢? Bash shell 支持丰富的文件模式匹配符例如: * - 匹配所有的文件。 ? - 匹配文件名中的单个字母。 - 匹配封闭括号中的任何一个字母。 策略 #1: 见识一下扩展的模式匹配符 这里你需要用系统内置的shopt命令来开启shell中的extglob选项,然后
Bash Getopts - 让你的脚本支持命令行参数

Bash Getopts - 让你的脚本支持命令行参数

以前我总想知道如何为我的Bash脚本创建命令行参数。经过搜索,我发现了2个函数可以处理这个问题,getopt 函数和 getopts 函数。我无意争论哪一个函数更好的。getopts 是一个shell内建命令,而且似乎比 getopt 更容易实现这个功能,所以在这篇文章里我准备讲讲getopts。 bash getopts 开始的时候,我只试着处理传递给脚本的命令行参数。最后,我添加了另外一些有用的功能函数,使得这个脚本可以成为其他任何交互式脚本处理命令行的开始模板。我还添加了一个纯文本格式的帮助函数,让脚本更加容易阅读。 与其来一长段文字解释 getopts 在ba