Bash shell

什么是 Shell?
我们必须要透过『 Shell 』将我们输入的指令与 Kernel 沟通,好让 Kernel 可以控制硬件来正确无误的工作!
                164458_h6FH_1757002.png
                   图一、硬件、核心与使用者的相关性图示
                                164519_h3z3_1757002.png
                    图二、硬件、核心与使用者的相关性图示
基本上,替我们工作的是『硬件』,而控制硬件的是『核心』,再来,我们使用者乃是利用『Shell』控制一些 kernel 提供的 『工具 (Utility)』来操控硬件替我们正确的工作。
以字面上的意思来说, kernel 是『核心』的意思,而 Shell 是『壳』的意思!kernel 核心是操作系统的最底层的东西!这个核心里头包括了各种的支持硬件的工具!如果你的硬件太新,而你的 kernel 并没有支持的话,那么你的 Shell 能力再怎么强,也没有办法使硬件工作的!使计算机主机工作的正是核心的任务,但是操作核心来替使用者工作的,却是 shell 喔!
狭隘的定义,一般来说,在 Linux 里头,所谓的 shell 就是指 BASH 这个文字模式的 shell 啰。但是,广义的 shell 也可以是 KDE 之类的图形接口控制软件呢! 因为他也可以帮我们与 kernel 进行沟通啊!
指令的下达:
[root@linux ~]# command [-options] parameter1 parameter2 ...
指令 选项 参数(1) 参数(2)
说明:
0. 一行指令中第一个输入的绝对是『指令(command)』或『可执行档案』
1. command 为指令的名称,例如变换路径的指令为 cd 等等;
2. 中刮号[]并不存在于实际的指令中,而加入参数设定时,通常为 - 号,例如 -h;
有时候完整参数名称会输入 -- 符号,例如 --help;
3. parameter1 parameter2.. 为依附在 option 后面的参数,
或者是 command 的参数;
4. command, -options, parameter1.. 这几个咚咚中间以空格来区分,
不论空几格 shell 都视为一格;
5. 按下 [Enter] 按键后,该指令就立即执行。[Enter] 按键为 <CR> 字符,
他代表着一行指令的开始启动。
6. 指令太长的时候,可以使用 \ 符号来跳脱 [Enter] 符号,
使指令连续到下一行。注意! \ 后就立刻接特殊字符。
7. 在 Linux 系统中,英文大小写字母是不一样的。举例来说, cd 与 CD 并不同。
范例:
范例一:列出 /root 底下的各文件名称
[root@linux ~]# ls -al /root
[root@linux ~]# ls -al /root
# 不论指令与参数中间空几格,都是可以接受的!

变量的设定:
范例一:设定一变量 name ,且内容为 VBird 。
[root@linux ~]# 12name=VBird
-bash: 12name=VBird: command not found <==屏幕会显示错误!因为不能以数字开头!
[root@linux ~]# name = VBird <==还是错误!因为有空白!
[root@linux ~]# name=VBird <==OK 的啦!
范例二:承上题,若变量内容为 VBird's name 呢?
[root@linux ~]# name=VBird's name
# 因为单引号可以将 Enter 这个特殊字符取消,所以,您可以继续在下一行输入内容~
# 不过,这与我们要达到的功能不同,所以,算是失败的啦!
[root@linux ~]# name="VBird's name" <==OK 的啦!
[root@linux ~]# name=VBird\'s\ name
# 利用反斜线 (\) 跳脱特殊字符,例如单引号与空格键,这也是 OK 的啦!
范例三:我要在 PATH 这个变量当中『累加』:/home/dmtsai/bin 这个目录
[root@linux ~]# PATH=$PATH:/home/dmtsai/bin
[root@linux ~]# PATH="$PATH":/home/dmtsai/bin
# 上面这两种格式在 PATH 里头的设定都是 OK 的!但是底下的例子就不见得啰!
范例四:呈范例三,我要将 name 的内容多出 "yes" 呢?
[root@linux ~]# name=$nameyes
# 知道了吧?如果没有双引号,那么变量成了啥?name 的内容是 $nameyes 这个变量!
# 呵呵!我们可没有设定过 nameyes 这个变量吶!所以,应该是底下这样才对!
[root@linux ~]# name="$name"yes
[root@linux ~]# name=${name}yes
范例五:如何让我刚刚设定的 name=VBird 可以用在下个 shell 的程序?
[root@linux ~]# name=VBird
[root@linux ~]# bash <==进入到所谓的子程序
[root@linux ~]# echo $name <==嘿嘿!并没有刚刚设定的内容喔!
[root@linux ~]# exit <==离开刚刚的子程序
[root@linux ~]# export name
[root@linux ~]# bash <==进入到所谓的子程序
[root@linux ~]# echo $name <==出现了设定值了!
[root@linux ~]# exit <==离开刚刚的子程序
# 什么是『子程序』呢?就是说,在我目前这个 shell 的情况下,
# 去启用另一个新的 shell ,新的那个 shell 就是子程序啦!在一般的状态下,
# 父程序的自订变量是无法在子程序内使用的。但是透过 export 将变量变成
# 环境变量后,就能够在子程序底下应用了!很不赖吧!至于程序的相关概念,
# 我们会在『程序与资源管理』章节当中提到的喔!
范例六:如何进入到您目前核心的模块目录?
[root@linux ~]# cd /lib/modules/`uname -r`/kernel
# 每个操作系统核心版本都不相同,以 FC4 为例,他的预设核心版本是
# 2.6.11-1.1369_FC4 所以,他的模块目录在 /lib/modules/2.6.11-1.1369_FC4/kernel 。
# 因为每个 distributions 的这个值都不相同,但是我们却可以利用 uname -r 这个指令
# 先取得版本信息,所以啰,就可以透过上面指令当中的内含指令 `uname -r`
# 先取得版本输出到 cd .. 那个指令当中,就能够顺利的进入目前核心的驱动程序所放置
# 的目录啰!很方便吧!
范例七:取消刚刚设定的 name 这个变量内容
[root@linux ~]# unset name

转载于:https://my.oschina.net/u/1757002/blog/870662

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值