Shell 必知
Shell 既是一种命令语言,又是一种程序设计语言(就是你所说的 shell 脚本)。作为命令语言,它互动式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。Shell 十三问应该 Shell 的(思想)精华本质所在,就像武功的内功心法,能够帮助读者清晰的理解 Shell 语言的用法。
命令类型查询:type读入配置文件:source操作系统内核(kernel)负责管理整个计算机硬件,但是这个内核是需要保护的,用户不能直接操作内核,因此就需要一个可以帮助我们操作内核的工具。
嗯,这次轻松一下,不讲太多... ^_^先说一下,为何要用 () 或者 {} 好了。许多时候,我们在 shell 操作上,需要在 一定的条件下执行多个命令,也就是说, 要么不执行,要么就全执行,而不是每次 依序的判断是否要执行下一个命令。或者,要从一些命令执行的先后次序中得到结果, 如算术运算的 2*(3+4) 那样...这时候,我们就可以引入 "命令群组"
shell是什么东西之前,不妨让我们重新审视使用者和计算机系统的关系:我们知道计算机的运作不能离开硬件,但使用者却无法直接操作硬件,硬件的驱动只能通过一种称为“操作系统(OS,Opertating System)”的软件来管控。事实上,我们每天所谈的“linux”,严格来说只是一个操作系统(OS),我们称之为“内核(kernel)”。
保证HDFS第一次运行,你需要通过在HADOOP_HOME目录中运行bin/start-hdfs.sh来启动和停止Hadoop HDFS守护进程。你确保它正确启动的方法是通过在 Hadoop 文件系统中测试文件的put和get。HBase通常不使用MapReduce或YARN守护进程,因此它们不需要启动。
在说什么是shell脚本之前,先说说什么是shell。shell是外壳的意思,就是操作系统的外壳。我们可以通过shell命令来操作和控制操作系统,比如Linux中的Shell命令就包括ls、cd、pwd等等。总结来说,Shell是一个命令解释器,它通过接受用户输入的Shell命令来启动、暂停、停止程序的运行或对计算机进行控制。
变量操作变量显示(echo)语法:echo $var 变量设置语法:var=value 变量的设置规则1.变量两端不能直接接空格符2.变量名称只能是因为字母与数字,但开头不能使数字3.双引号内的特殊字符如$等,保持原本特性[root@bogon ~]# var="lang is $LANG"[root@bogon ~]# echo %varroot@bogon ~]# echo $varlang is zh_CN.UTF-81.
shell script 是利用 shell 的功能所写的一个程序,这个程序使用纯文本文件,将一些 shell 的语法和命令写在里面,搭配正则表达式,管道命令与数据流重定向等功能,达到我们想要的目的shell script 执行直接命令执行shell script 文件必须具备 rx 的权限,假设 my.sh 在 /root 下绝对路径[root@bogon ~]# /root/my.sh相对路径[root@bogon ~]# . /my.
正如我们之前所讨论到的,shell 在 shell 会话中维护着大量的信息,这些信息称为 (shell) 环境。存储在 shell 环境中的数据被程序用来确定配置属性。然而大多数程序用配置文件来存储程序设置,某些程序也会查找存储在 shell 环境中的数值来调整他们的行为。知道了这些,我们就可以用 shell 环境来自定制 shell 经历。
一说到命令行,我们真正指的是 shell。shell 就是一个程序,它接受从键盘输入的命令,然后把命令传递给操作系统去执行。几乎所有的 Linux 发行版都提供一个名为 bash 的来自 GNU 项目的 shell 程序。“bash” 是 “Bourne Again SHell” 的首字母缩写,所指的是这样一个事实,bash 是最初 Unix 上由 Steve Bourne 写成 shell 程序 sh 的增强版。
这个题目说穿了,就是要探讨Wildcard与Regular Expression的差别的。这也是很多初学shell的朋友很容易混淆的地方。首先,让我们回到十三问之第2问,再一次将我们提到的command line format 温习一次:command_name options arguments同时,也再来理解一下,我在第5章所提到的变量替换的特性:先替换,再重组 command line!
还记得我们在第10章所介绍的return value吗?是的,接下来的介绍的内容与之有关,若你的记忆也被假期所抵消的话,那建议您还是回去温习温习再回来...若你记得return value,我想你也应该记得了&& 与 || 什么意思吧?用这两个符号再搭配 command group的话,我们可让shell script变得更加聪明哦。比方说:cmd1 && { cmd2 cmd3 ;
好不容易,进入了两位数的章节了... 一路走来,很辛苦吧?也很快乐吧? ^_^在解答本章题目之前,先让我们了解一个概念: return value。我们在 shell 下跑的每一个 command 或 function, 在结束的时候都会传回父进程一个值,称为 return value。在 shell command line 中可用$?, 这个变量得到最 "新" 的一个return value, 也就是刚刚结束的那个进程传回的值。
$@与 $* 差在哪?要说 $@与 $* 之前, 需得先从 shell script 的 positional parameter 谈起...我们都已经知道变量 (variable) 是如何定义和替换的, 这个不再多讲了。shell script 的 positional parameter但是,我们还需要知道有些变量是 shell 内定的, 且其名称是我们不能随意修改的。 其中,就有 positional parameter 在内。
我们上一章介绍了()与{}的不同,这次让我们扩展一下,看看更多的变化:$()与${}又是啥玩意儿呢?在bash shell中, $()与``(反引号)都是用来做命令替换(command substitution)的。所谓的命令替换与我们第五章学过的变量替换差不多,都是用来重组命令行:完成 `` 或者$()里面的命令,将其结果替换出来,再重组命令行。
终于到shell 脚本这章了,在以前笔者卖了好多关子说shell脚本怎么怎么重要,确实shell脚本在linux系统管理员的运维工作中非常非常重要。下面笔者就带你正式进入shell脚本的世界吧。到现在为止,你明白什么是shell脚本吗?如果明白最好了,不明白也没有关系,相信随着学习的深入你就会越来越了解到底什么是shell脚本。首先它是一个脚本,并不能作为正式的编程语言。
历史上,shell一直是类Unix系统的本地命令行解释器。它已被证明是Unix的主要功能之一,并发展成为一个全新的主题。Linux提供了各种功能强大的shell,包括Bash、Zsh、Tcsh和Ksh。这些外壳最令人惊讶的特性之一是其可编程性。创建简单而有效的Linux shell脚本来处理日常工作非常容易。
在前面的章节中,我们已经装备了一个命令行工具的武器库。虽然这些工具能够解决许多种计算问题,但是我们仍然局限于在命令行中手动地一个一个使用它们。难道不是很棒,如果我们能够让 shell 来完成更多的工作?我们可以的。通过把我们的工具一起放置到我们自己设计的程序中,然后 shell 就会自己来执行这些复杂的任务序列。
在这一章中,我们将会看一下表面上看来很琐碎的细节-shell 提示符。但这会揭示一些内部 shell 和终端仿真器的工作方式。和 Linux 内的许多程序一样,shell 提示符是可高度配置的,虽然我们把它相当多地看作是理所当然的,但是我们一旦学会了怎样控制它,shell 提示符是一个真正有用的设备。
关注时代Java