Linux基础入门之BASH特性及用法

摘要

在介绍bash之前,需要先介绍它的起源——shell。shell俗称壳,它是指UNIX系统下的一个命令解析器;主要用于用户和系统的交互。UNIX系统上有很多种Shell。首个shell,即Bourne Shell,于1978年在V7(AT&T的第7版)UNIX上推出。后来,又演变出C shell、bash等不同版本的shell。bash,全称为Bourne-Again Shell。它是一个为GNU项目编写的Unix shell。bash脚本功能非常强大,尤其是在处理自动循环或大的任务方面可节省大量的时间。bash是许多Linux平台的内定Shell,这也是我们介绍它主要的原因。

bash快捷键

编辑类命令

Ctrl + a : 移到命令行首
Ctrl + e : 移到命令行尾
Ctrl + f : 按字符前移 ( 右向 )
Ctrl + b : 按字符后移 ( 左向 )
Alt + f : 按单词前移 ( 右向 )
Alt + b : 按单词后移 ( 左向 )
Ctrl + xx: 在命令行首和光标之间移动
Ctrl + u : 从光标处删除至命令行首
Ctrl + k : 从光标处删除至命令行尾
Ctrl + w : 从光标处删除至字首
Alt + d : 从光标处删除至字尾
Ctrl + d : 删除光标处的字符
Ctrl + h : 删除光标前的字符
Ctrl + y : 粘贴至光标后
Alt + c : 从光标处更改为首字母大写的单词
Alt + u : 从光标处更改为全部大写的单词
Alt + l : 从光标处更改为全部小写的单词
Ctrl + t : 交换光标处和之前的字符
Alt + t : 交换光标处和之前的单词
Alt + Backspace: 与 Ctrl + w ~~ 相同 ~~ 类似 , 分隔符有些差别

重新执行命令

Ctrl + r: 逆向搜索命令历史
Ctrl + g: 从历史搜索模式退出
Ctrl + p: 历史中的上一条命令
Ctrl + n: 历史中的下一条命令
Alt + .: 使用上一条命令的最后一个参数

控制命令

Ctrl + l: 清屏
Ctrl + o: 执行当前命令 , 并选择上一条命令
Ctrl + s: 阻止屏幕输出
Ctrl + q: 允许屏幕输出
Ctrl + c: 终止命令
Ctrl + z: 挂起命令

Bang (!) 命令

!!: 执行上一条命令
!blah: 执行最近的以 blah 开头的命令 , 如 !ls
!blah:p: 仅打印输出 , 而不执行
!$: 上一条命令的最后一个参数 , 与 Alt + . 相同
!$:p: 打印输出 !$ 的内容
!*: 上一条命令的所有参数
!:p: 打印输出 ! 的内容
^blah: 删除上一条命令中的 blah
^blah^foo: 将上一条命令中的 blah 替换为 foo
^blah^foo^: 将上一条命令中所有的 blah 都替换为 foo

bash环境

编译器

解释器

过程式编程语言

顺序执行

选择执行

循环执行

解释器:同时提供了编程环境

bash重要特性:变量

本地变量:只对当前shell进程有效的变量;对其他shell进程无效,包括当前shell进程的子进程;

变量赋值:向变量的存储空间保存数据

VAR_NAME=VALUE,由于bash是动态语言,所以变量无需事先声明,可以直接拿来赋值。

变量引用:${VAR_NAME} ({}经常可以被省略)

"":弱引用,里面的变量会被替换

'':强引用,里面的所有字符都是字面量,直接输出

环境变量:对当前shell进程及其子shell进程有效,对其他shell进程无效;

export VAR_NAME=VALUE:用户可自定义环境变量,bash有许多内置的环境变量

撤销变量:unset VAR_NAME

只读变量:readonly VAR_NAME

局部变量

local VAR_NAME=VALUE:只对shell脚本中某代码片段有效;通常用于函数本地

位置变量

$1,$2,$3...${10},${11}...:当位置变量达到2位数时需要用{}括起来

特殊变量

$?、$!、$$、$#、$@、$0、$_ 、$-

变量查询

set:列出当前shell进程中的所有变量

exprot、printenv、env:列出当前shell进程中的环境变量

变量命名

1、不能使用程序中的关键字(保留字);

例如:if、for、while、case

2、只能试用数字、字母、下划线,且不能以数字开头

3、要能见名知义,

注意:Linux是严格区分大小写的,所以username≠Username≠USERNAME

(一个默认规则,一般变量名都不用大写开始,大写开始的一般都用作函数,当然这只是个良好编程的习惯,不是强制要求)

变量类型:(这里的变量指的是变量名本身而严格来说变量的值才有类型的所以说这里的定义并不严谨)

1、定义存储机制

2、定义存储空间

3、定义参与的运算类型

变量类型:

数值型:

精确数值:整数

近似数值:浮点型 什么叫浮点数?

单精度浮点

双精度浮点

字符型:

单个字符 char

字串 string

布尔型:

true、false

类型转换:

显示转换

隐式转换


bash的配置文件:

profile类:主要为交互式登录的用户提供配置

全局:

/etc/profile

/etc/profile.d/*.sh

用户:

~/.bash_profile

功用:

1、设定环境变量

2、运行命名或脚本

bashrc类:主要为非交互式用户提供配置

全局:

/etc/bashrc

用户:

~/.bashrc

功用:

1、设定本地变量

2、定义命令别名

登录类型

交互式:

直接通过终端输入帐号和密码登录:

使用su -l USERNAME 或 su - USERNAME

非交互式:

su USERNAME

图形界面下打开的终端

执行脚本

通过编辑配置文件修改的配置生效:

1、退出并重新登录

2、让bash重读此配置文件

方法1:. FILE

方法2:source FILE

交互登录的用户:

配置文件读取次序:

/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

非交互式登录的用户:

配置文件读取次序:

~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh


 

$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。
$# 传递给脚本或函数的参数个数。
$? 最后运行的命令的结束代码(返回值)
$! Shell最后运行的后台Process的PID
$$ Shell本身的PID(ProcessID)
$0 当前脚本的文件名
$_ shell启动时,设置为shell或参数中被执行的shell脚本的绝对路径名
$- 显示shell使用的当前选项,与set命令功能相同
如果"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
如果"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
"$_":它也被设置为被执行的每个命令的文件全名并且被设置到这个命令执行的环境当中。当检查邮件时,这个参数保存着正在检查的邮件文件的名称。

bash快捷键
Linux基础入门之BASH特性及用法
本地变量只对当前shell进程有效
[root@www.dwhd.org ~]$ UserName=&quot;www.dwhd.org&quot;<br />
	[root@www.dwhd.org ~]$ echo $UserName<br />
	www.dwhd.org<br />
	[root@www.dwhd.org ~]$ bash<br />
	[root@www ~]# bash<br />
	[root@www ~]# echo $UserName
</p>

<p>
	[root@www ~]# pstree<br />
	init─┬─abrtd<br />
	├─acpid<br />
	├─atd<br />
	├─auditd───{auditd}<br />
	├─automount───4*[{automount}]<br />
	├─bluetoothd<br />
	├─crond<br />
	├─cupsd<br />
	├─dbus-daemon<br />
	├─dhclient<br />
	├─hald─┬─hald-runner─┬─hald-addon-acpi<br />
	│ │ ├─hald-addon-inpu<br />
	│ │ └─hald-addon-rfki<br />
	│ └─{hald}<br />
	├─irqbalance<br />
	├─master─┬─pickup<br />
	│ └─qmgr<br />
	├─6*[mingetty]<br />
	├─rpc.statd<br />
	├─rpcbind<br />
	├─rsyslogd───3*[{rsyslogd}]<br />
	├─sshd───sshd───bash───screen───screen───bash───bash───bash───pstree<br />
	└─udevd───2*[udevd]<br />
	[root@www ~]# 

Linux基础入门之BASH特性及用法
单双引号在shell变量中的作用

[root@www.dwhd.org ~]$ echo $UserName<br />
	www.dwhd.org<br />
	[root@www.dwhd.org ~]$ echo &quot;$UserName&quot;<br />
	www.dwhd.org<br />
	[root@www.dwhd.org ~]$ echo &#39;$UserName&#39;<br />
	$UserName<br />
	[root@www.dwhd.org ~]$ 

Linux基础入门之BASH特性及用法
bash环境变量

[root@www.dwhd.org ~]$ export UserName=www-test.dwhd.org<br />
	[root@www.dwhd.org ~]$ echo $UserName<br />
	www-test.dwhd.org<br />
	[root@www.dwhd.org ~]$ bash<br />
	[root@www ~]# echo $UserName<br />
	www-test.dwhd.org<br />
	[root@www ~]# echo $UserName<br />
	www-test.dwhd.org<br />
	[root@www ~]# pstree<br />
	init─┬─abrtd<br />
	├─acpid<br />
	├─atd<br />
	├─auditd───{auditd}<br />
	├─automount───4*[{automount}]<br />
	├─bluetoothd<br />
	├─crond<br />
	├─cupsd<br />
	├─dbus-daemon<br />
	├─dhclient<br />
	├─hald─┬─hald-runner─┬─hald-addon-acpi<br />
	│ │ ├─hald-addon-inpu<br />
	│ │ └─hald-addon-rfki<br />
	│ └─{hald}<br />
	├─irqbalance<br />
	├─master─┬─pickup<br />
	│ └─qmgr<br />
	├─6*[mingetty]<br />
	├─rpc.statd<br />
	├─rpcbind<br />
	├─rsyslogd───3*[{rsyslogd}]<br />
	├─sshd───sshd───bash───screen───screen───bash───bash───pstree<br />
	└─udevd───2*[udevd]<br />
	[root@www ~]# 

Linux基础入门之BASH特性及用法

lookback
  • 本文由 发表于 2015年5月25日00:45:09
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: