第十一章 认识与学习BASH【鸟哥linux私房菜学习笔记】

认识与学习BASH一、认识bash这个shell(一)bash shell 的功能1、history指令默认的命令记忆功能为1000条命令。本次登录过程中使用的命令保存在内存中,之前登录的命令保存在“~/bash_history”。可以通过上下箭头来查找历史功能问题:当电脑被入侵,黑客可以查询曾经的操作,而记录中有对系统的操作(比如输入过MySQL的密码),那么还是很危险的。所以记录的历史命令操作...
摘要由CSDN通过智能技术生成

认识与学习BASH

一、认识bash这个shell

(一)bash shell 的功能

1、history指令

默认的命令记忆功能为1000条命令。本次登录过程中使用的命令保存在内存中,之前登录的命令保存在“~/bash_history”。可以通过上下箭头来查找历史功能

问题:当电脑被入侵,黑客可以查询曾经的操作,而记录中有对系统的操作(比如输入过MySQL的密码),那么还是很危险的。所以记录的历史命令操作有多少,就是见仁见智了。

2、tab命令补全

tab接在一串命令的第一个不完整单词的后面,则是补全命令

tab接在一串命令的第二个不完整的单词后面,是补全文件名

举例:某文件夹下只有一个以test开头的文件:test123,那么输入“more tes”再按tab,可以补全;

但是如果某个文件夹有,有文件test1,test2,那么输入“more test”后,无反应。

“** tab tab”是列出所有以**开头的指令操作,仅对于指令,不针对文件

3、别名配置

alias [ˈeɪliəs]:别名

直接输入alias可以查看当前使用别名情况

或者可以通过alias进行别名设置:


以后想查看进程信息,输入“lm”即可

4、通配符

当想要查询某个文件夹下以X开头的文件有哪些时,使用:ls -l /usr/bin/X* 

注意文件结构,否则容易找不到被提示没有该目录。

(二)bash shell的内建命令:type

通过type这个命令,我们可以知道哪些是内置命令,哪些是后来外部添加上的。内置命令一般保存在root下的bin目录下,而外部命令需要输入命令“type  -p  外部命令name ”。(注意:-p 如果后面接的name为外部命令时,才会显示完整文件名)


type对于大工程管理意义重大,比如给多个电脑搭建同样的平台,如果配置的员工不熟悉老电脑,就要靠这个命令来找可执行文件的位置,保证配置统一。

二、Shell变量

(一)变量的取用与配置:echo, 变量配置守则, unset

1、变量的配置守则

    1)等号两边不能直接出现空格符,如果在等号右边赋值时需要使用空格,则要加单引号或者双引号 。

myname=VBird Tsai是错误的;需要加上单引号或者双引号。


等号右边有空格的时候,必须要加单引号或者双引号,如果没有空格,即使有特殊字符,也可以直接赋值,且会显示变量内容,如上图。(目前接触到的,“特殊字符”是指“$”,但是跳脱字符“\”,在单引号和双引号中,都能保持活性,举例如图

    2)双引号内的特殊字符,可以保持原来的特性;单引号内,全部视为纯文本

    第二行的错误,是因为没有加“$”符号,所以打印出了变量名

    3)跳脱字符“\”

    可以使比如“\”“enter”这种具有特殊含义的符号,转化为正常符号

    4)在命令中引用变量,可以使用$符号或者单引号

    扩展:带变量的数学运算

范例六:如何进入到您目前核心的模块目录?
[root@www ~]# cd /lib/modules/`uname -r`/kernel
        上面的范例其实执行了两步,第一步是进行反单引号的内容,得到内核版本为2.6.18-128.el5,第二步试讲上述的结果带入到原命令。

    5)扩增内容时,也可用$

     path="$PATH":/home/bin

    6)通常大写字符为系统默认变量,自行设置的变量使用小写字符,方便判断

    7)取消变量

       

    8)如果其他程序中需要使用变量,则要把变量变为环境变量

    export val_name

范例一:配置一变量 name ,且内容为 VBird
[root@www ~]# 12name=VBird
-bash: 12name=VBird: command not found  <==屏幕会显示错误!因为不能以数字开头!
[root@www ~]# name = VBird            <==还是错误!因为有空白!
[root@www ~]# name=VBird              <==OK 的啦!

范例二:承上题,若变量内容为 VBird's name 呢,就是变量内容含有特殊符号时:
[root@www ~]# name=VBird's name  
# 单引号与双引号必须要成对,在上面的配置中仅有一个单引号,因此当你按下 enter 后,
# 你还可以继续输入变量内容。这与我们所需要的功能不同,失败啦!
# 记得,失败后要复原请按下 [ctrl]-c 结束!
[root@www ~]# name="VBird's name"    <==OK 的啦!
# 命令是由左边向右找→,先遇到的引号先有用,因此如上所示,单引号会失效!
[root@www ~]# name='VBird's name'    <==失败的啦!
# 因为前两个单引号已成对,后面就多了一个不成对的单引号了!因此也就失败了!
[root@www ~]# name=VBird\'s\ name     <==OK 的啦!
# 利用反斜杠 (\) 跳脱特殊字符,例如单引号与空格键,这也是 OK 的啦!

范例三:我要在 PATH 这个变量当中『累加』:/home/dmtsai/bin 这个目录
[root@www ~]# PATH=$PATH:/home/dmtsai/bin
[root@www ~]# PATH="$PATH":/home/dmtsai/bin
[root@www ~]# PATH=${PATH}:/home/dmtsai/bin
# 上面这三种格式在 PATH 里头的配置都是 OK 的!但是底下的例子就不见得啰!

范例四:承范例三,我要将 name 的内容多出 "yes" 呢?
[root@www ~]# name=$nameyes  
# 知道了吧?如果没有双引号,那么变量成了啥?name 的内容是 $nameyes 这个变量!
# 呵呵!我们可没有配置过 nameyes 这个变量吶!所以,应该是底下这样才对!
[root@www ~]# name="$name"yes
[root@www ~]# name=${name}yes  <==以此例较佳!

范例五:如何让我刚刚配置的 name=VBird 可以用在下个 shell 的程序?
[root@www ~]# name=VBird
[root@www ~]# bash        <==进入到所谓的子程序
[root@www ~]# echo $name  <==子程序:再次的 echo 一下;
       <==嘿嘿!并没有刚刚配置的内容喔!
[root@www ~]# exit        <==子程序:离开这个子程序
[root@www ~]# export name
[root@www ~]# bash        <==进入到所谓的子程序
[root@www ~]# echo $name  <==子程序:在此运行!
VBird  <==看吧!出现配置值了!
[root@www ~]# exit        <==子程序:离开这个子程序

范例一:配置一变量 name ,且内容为 VBird
[root@www ~]# 12name=VBird
-bash: 12name=VBird: command not found  <==屏幕会显示错误!因为不能以数字开头!
[root@www ~]# name = VBird            <==还是错误!因为有空白!
[root@www ~]# name=VBird              <==OK 的啦!

范例二:承上题,若变量内容为 VBird's name 呢,就是变量内容含有特殊符号时:
[root@www ~]# name=VBird's name  
# 单引号与双引号必须要成对,在上面的配置中仅有一个单引号,因此当你按下 enter 后,
# 你还可以继续输入变量内容。这与我们所需要的功能不同,失败啦!
# 记得,失败后要复原请按下 [ctrl]-c 结束!
[root@www ~]# name="VBird's name"    <==OK 的啦!
# 命令是由左边向右找→,先遇到的引号先有用,因此如上所示,单引号会失效!
[root@www ~]# name='VBird's name'    <==失败的啦!
# 因为前两个单引号已成对,后面就多了一个不成对的单引号了!因此也就失败了!
[root@www ~]# name=VBird\'s\ name     <==OK 的啦!
# 利用反斜杠 (\) 跳脱特殊字符,例如单引号与空格键,这也是 OK 的啦!

范例三:我要在 PATH 这个变量当中『累加』:/home/dmtsai/bin 这个目录
[root@www ~]# PATH=$PATH:/home/dmtsai/bin
[root@www ~]# PATH="$PATH":/home/dmtsai/bin
[root@www ~]# PATH=${PATH}:/home/dmtsai/bin
# 上面这三种格式在 PATH 里头的配置都是 OK 的!但是底下的例子就不见得啰!

范例四:承范例三,我要将 name 的内容多出 "yes" 呢?
[root@www ~]# name=$nameyes  
# 知道了吧?如果没有双引号,那么变量成了啥?name 的内容是 $nameyes 这个变量!
# 呵呵!我们可没有配置过 nameyes 这个变量吶!所以,应该是底下这样才对!
[root@www ~]# name="$name"yes
[root@www ~]# name=${name}yes  <==以此例较佳!

范例五:如何让我刚刚配置的 name=VBird 可以用在下个 shell 的程序?
[root@www ~]# name=VBird
[root@www ~]# bash        <==进入到所谓的子程序
[root@www ~]# 
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值