⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0320bash.htm

📁 鸟哥的linux私房菜
💻 HTM
📖 第 1 页 / 共 5 页
字号:
2. 中刮号[]并不存在于实际的指令中,而加入参数设定时,通常为 - 号,例如 -h;
   有时候完整参数名称会输入 -- 符号,例如 --help;
3. parameter1 parameter2.. 为依附在 option 后面的参数,
   或者是 command 的参数; 
4. command, -options, parameter1.. 这几个咚咚中间以空格来区分,
   不论空几格 shell 都视为一格; 
5. 按下 [Enter] 按键后,该指令就立即执行。[Enter] 按键为 <CR> 字符,
   他代表著一行指令的开始启动。
6. 指令太长的时候,可以使用 \ 符号来跳脱 [Enter] 符号,
   使指令连续到下一行。注意! \ 后就立刻接特殊字符。
7. 在 Linux 系统中,英文大小写字母是不一样的。举例来说, cd 与 CD 并不同。
范例∶</span>

<span class=term_hd>范例一∶列出 /root 底下的各档案名称</span>
[root@linux ~]# <span class=term_command>ls -al /root</span>
[root@linux ~]# <span class=term_command>ls     -al      /root</span>
<span class=term_say># 不论指令与参数中间空几格,都是可以接受的!</span>

<span class=term_hd>范例二∶如果指令太长的话,如何使用两行来输出?</span>
[root@linux ~]# <span class=term_command>cp /var/spool/mail/root /etc/crontab \</span>
> <span class=term_command>/etc/fstab /root</span>
<span class=term_say># 上面这个指令,就是将三个档案复制到 /root 这个目录下而已。不过,因为指令太长,
# 于是鸟哥就利用 \[Enter] 来将 [Enter] 这个按键『跳脱!』开来,让
# [Enter] 按键不再具有上述说明的第 5 点功能!好让指令继续在下一行输入。
# 需要特别留意, [Enter] 按键是紧接著反斜线 (\) 的,两者中间没有其他字元。
# 因为 \ 仅跳脱『紧接著的下一个字符』而已!所以,万一我写成∶
# \ [Enter] ,亦即 [Enter] 与反斜线中间有一个空格时,则 \ 跳脱的是『空白键』
# 而不是 [Enter] 按键!这个地方请在仔细的看一遍!很重要!
# 如果顺利跳脱 [Enter] 后,下一行最前面就会主动出现 > 的符号,
# 您可以继续输入指令棉!也就是说,那个 > 是系统自动出现的,你不需要输入。</span>
</pre></td></tr></table>

		总之,当我们顺利的在终端机 (tty) 上面登入后, Linux 就会依据 /etc/passwd 
		档案的设定给我们一个 shell ,预设就是 bash ,然后我们就可以依据上面的指令下达方式来操作 shell,
		之后,我们就可以透过 man 这个线上查询来查询指令的使用方式与参数说明,
		很不错吧!那么我们就赶紧更进一步来操作 bash 这个好玩的东西棉!
	</div>
</div>


<hr><a NAME="variable"></a><img src="images/penguin-m.gif" alt="大标题的图示" height="34" width="25" align="middle" /><span class="text_h1">Shell 的变数功能</span><br>
<div class=block1>
	在继续研究 BASH 之前,我们得要先就 <span class=text_import2>变数</span> 这个东西来讨论一番。
	为什么要讨论变数呢?又,变数是啥玩意儿啊?!先来谈一谈国中数学好了,您是否依稀记得,
	我们国中时候学过所谓的『 y = ax + b 』这东西?其中, y 是变数, x 则是这个变数的内容啊!
	讲的更简单一点,我们可以『<span class=text_import2>用一个简单的 "字眼" 
	来取代另一个比较复杂或者是容易变动的资料</span>』。这有什么好处啊?最大的好处就是『方便!』。<br><br>

	如果以 Linux 主机的运作来说明好了,因为在主机里面有太多的资料需要进行存取了,
	而这些资料都是一些服务所必须的,例如某个名为 dmtsai 的帐号,他的 mail 的存取路径预设是在 
	/var/spool/mail/dmtsai 、家目录预设在 /home/dmtsai 等等。那如果换了另外一个帐号呢?
	假设另一个帐号名称为 vbird ,你猜他的邮件与家目录在哪?应该是在 /var/spool/mail/vbird 与 /home/vbird 对吧!
	那么我们主机的邮件服务是否要记录好几个不同的路径啊?会不会太麻烦?这当然很麻烦棉~
	所以为了简化整个运作流程,我们就可以透过某个变数功能,让这个变数可以依据不同的使用者而变更内容,
	如此一来,系统的邮件服务只要依据那个变数去取得所需要的资料即可,就不需要记录不同的路径棉。<br><br>

	举例来说,我们每个帐号的邮件信箱预设是以 MAIL 这个变数来进行存取的,
	当 dmtsai 这个使用者登入时,他便会取得 MAIL 这个变数,而这个变数的内容其实就是 /var/spool/mail/dmtsai,
	那如果 vbird 登入呢?他取得的 MAIL 这个变数的内容其实就是 /var/spool/mail/vbird 。
	而我们使用信件读取指令 mail 来读取自己的邮件信箱时,嘿嘿,这支程式可以直接读取 MAIL 这个变数的内容,
	就能够自动的分辨出属于自己的信箱信件棉!这样一来,设计程式的设计师就真的很方便的啦!<br><br>

	当然我们可以改变这些个变数,但是如果该变数是直接深植于套件当中,
	那么当你修改了某些参数之后,嘿嘿!你的套件就必须要『<span class=text_import2>由原始码直接更新再编译</span>』
	才行!这样似乎很麻烦,所以棉,变数真的是很方便的啦!<br>

	<div style="padding: 10 0 10 0 ;" align="right"><table width="90%"><tr><td><b>Tips:</b><br /><span style="font-style: italic; color : darkgreen">		举个简单的例子来说, sendmail 的 smtp 存放 mail 路径是经由 /etc/profile 里头的∶
		<UL>MAIL="/var/spool/mail/$USER"</ul>
		来设定的,而当我修改了上面这一个咚咚,然后重新开机之后,嘿嘿嘿嘿!
		我的邮件就可以存放到不同的路径去了!而且不会有问题!可以顺利的『在
		Linux 主机上面』收发。然而问题发生在 pop3 这个服务上面,由于 pop3 的预设路径是在
		source code 里头,而且就正是 /var/spool/mail 这个路径,也就是说,不论我怎么修正我的『变数』,
		pop3 都不为所动!唉~真惨,所以就无法直接以 pop3 来收信了(例如 OutLook
		就不能工作了)!会发生密码不接受的问题呢!
	</span></td><td><img src="../images/vbird_face.gif" /></td></tr></table></div>
	再来继续讲到其他的变数功能好了,我们前面已经提到过很多次,能不能执行某个指令,
	与 PATH 这个变数也有很大的关系的。举例来说,我们在任何地方下达 ls 这个指令时,系统就是透过 PATH 
	这个变数里面的内容所记录的路径顺序来搜寻指令的呢!如果在搜寻完 PATH 变数内的路径还找不到 ls 这个指令时,
	就会在萤幕上显示『 command not found 』的错误讯息了。<br><br>

	这些还都只是系统预设的变数的目的,如果是个人的设定方面的应用呢∶例如你要写一个大型的
	script (批次档)时,有些资料因为可能由于使用者习惯的不同而有差异,比如说路径好了,由于该路径在
	script 被使用在相当多的地方,如果下次换了一部主机,都要修改 script 里面的所有路径,那么我一定会疯掉!
	这个时候如果使用变数,而将该变数的定义写在最前面,后面相关的路径名称都以变数来取代,
	嘿嘿!那么你只要修改一行就等于修改整篇 script 了!方便的很!所以,良好的程式设计师都会善用变数的定义!
	(<span class=text_vbird> 这个部分我们在后续的 shell script 再次提及的!</span>)<br><br>

	如果说的学理一点,那么由于在 Linux System 下面,所有的执行续都是需要一个执行码,
	而就如同上面提到的,你『<span class=text_import2>真正以
	shell 来跟 Linux 沟通,是在正确的登入 Linux 之后!</span>』这个时候你就有一个
	bash 的执行程序,也才可以真正的经由 bash 来跟系统沟通棉!而在进入 shell
	之前,也正如同上面提到的,由于系统需要一些变数来提供他资料的存取(或者是一些环境的设定参数值,
	例如是否要显示彩色等等的),所以就有一些所谓的『<span class=text_import2>环境变数</span>』
	需要来读入系统中了!这些环境变数例如 PATH、HOME、MAIL、SHELL 等等,都是很重要的,
	为了区别与自订变数的不同,环境变数通常以大写字元来表示呢!<br><br>

	好了,那么我们就简单的来对『<span class=text_import2>什么是变数</span>』作个简单的定义好了∶
	『<span class=text_import2>变数就是以一组文字或符号等,来取代一些设定或者是一串保留的资料!</span>』,
	例如∶我设定了『myname』就是『VBird』,所以当你读取
	myname 这个变数的时候,系统自然就会知道!哈!那就是 VBird 啦!最简单的例子可以取 PATH
	来说明!如果你对于『<a href="0220filemanager.php#dir_pathway">相对路径与绝对路径</a>』还有点印象的话,
	那么应该晓得『<span class=text_import2>要下达正确的指令,应该需要指定路径与档名</span>』才行!例如你的
	ls 指令应该需要以『/bin/ls』来下达指令才对,那么为何你在任意的路径下都可以执行
	ls 呢?而不需要指定路径呢?这是因为系统已经预设了一些『<span class=text_import2>搜寻路径(PATH)</span>』了,
	所以当你需要执行一些指令的时候,系统就会依照该
	PATH 的设定来进行指令的搜寻!而这个 PATH 就是所谓的变数了!<br><br>

	那么如何『<span class=text_import2>显示变数</span>』呢?这就需要使用到 echo 这个指令啦!<br><br>

	<hr><a name="variable_echo"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>变数的取用与设定∶echo, 
	变数设定规则, unset</span><br>
	<div class=block2>
		说的口沫横飞的,也不知道『变数』与『变数代表的内容』有啥关系?
		当然啦,那我们就将『变数』的『内容』拿出来给您瞧瞧就好了。利用 echo 这个指令来取用变数,
		但是,变数在被取用时,前面必须要加上 $ 才行,举例来说,要知道 PATH 的内容,该如何是好?<br>

<a name=echo></a><table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>echo $variable</span>
[root@linux ~]# <span class=term_command>echo $PATH</span>
/bin:/sbin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin
[root@linux ~]# <span class=term_command>echo ${PATH}</span>
</pre></td></tr></table>

		变数的取用就如同上面的范例,利用 ehco 就能够读出,只是需要在变数名称前面加上 $ ,
		或者是以 ${variable} 的方式来取用都可以!当然啦,那个 echo 的功能可是很多的,
		我们这里单纯是拿 echo 来读出变数的内容而已,更多的 echo 使用,请自行给他 man echo 吧! ^_^<br><br>

<table border=1 width=90% cellspacing=0 cellpadding=5><tr><td>
例题一∶请在萤幕上面显示出您的环境变数 HOME 与 MAIL∶<br>
答∶<ul><span class=text_import2><font face="细明体">echo $HOME<br> echo $MAIL</font></span></ul>
</td></tr></table><br>

		OK!现在我们知道了变数与变数内的之间的相关性了,好了,那么我要如何『设定』或者是『修改』
		某个变数的内容啊?!很简单啦!用『等号(=)』连接变数与他的内容就好啦!举例来说∶
		我要将 myname 这个变数名称的内容设定为 VBird ,那么∶<br>

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>echo $myname</span>
   <span class=term_note>&lt;==这里并没有任何资料~因为这个变数尚未被设定!是空的!</span>
[root@linux ~]# <span class=term_command>myname=VBird</span>
[root@linux ~]# <span class=term_command>echo $myname</span>
VBird  <span class=term_note>&lt;==出现了!因为这个变数已经被设定了!</span>
</pre></td></tr></table>

		瞧!如此一来,这个变数名称 myname 的内容就带有 VBird 这个资料棉~
		而由上面的例子当中,我们也可以知道∶
		<span class=text_import2>当一个变数名称尚未被设定时,预设的内容是『空』的</span>。
		<a name="variable_rule"></a>另外,变数在设定时,还是需要符合某些规定的,否则会设定失败喔!
		这些规则如下所示啊!<ol><span class=text_import2>

		<li>变数与变数内容以等号『=』来连结;
		<li>等号两边不能直接接空白字元;
		<li>变数名称只能是英文字母与数字,但是数字不能是开头字元;
		<li>若有空白字元可以使用双引号『 " 』或单引号『 ' 』来将变数内容结合起来,但须要特别留意,
			双引号内的特殊字元可以保有变数特性,但是单引号内的特殊字元则仅为一般字元;
		<li>必要时需要以跳脱字元『 \ 』来将特殊符号 ( 如<font face="细明体"> Enter,
			$, \, 空白字元, ' </font>等 ) 变成一般符号;
		<li>在一串指令中,还需要藉由其他的指令提供的资讯,可以使用
			quote 『 <font face="细明体">` command` </font>』;(特别特别注意,那个 ` 是键盘上方的数字键 1 
			左边那个按键,而不是单引号!)
		<li>若该变数为扩增变数内容时,则需以双引号及 $变数名称
			如∶『 <font face="细明体">"$PATH":/home</font>』继续累加内容;
		<li>若该变数需要在其他子程序执行,则需要以 export 来使变数变成环境变数,
			如『<font face="细明体">export PATH</font>』;
		<li>通常大写字元为系统预设变数,自行设定变数可以使用小写字元,方便判断
			( 纯粹依照使用者兴趣与嗜好 ) ;
		<li><a name="unset"></a>取消变数的方法为∶『<font face="细明体">unset 变数名称</font>』。</ol></span>

		底下我们举几个例子来让您试看看,就知道怎么设定好您的变数棉!<br>

<table class="term"><tr><td class="term"><pre>
<span class=term_hd>范例一∶设定一变数 name ,且内容为 VBird 。</span>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -