linux中bash的特点,bash特性之基础

bash shell

命令历史history

环境变量:

HISTSIZE :命令历史记录的条数

HISTFILE :~/.bash_history

HISTFILESIZE:

显示环境变量:echo

3c8ce6380daa33c267ccb0e2e66a02de.png

环境变量的修改:export

3c8ce6380daa33c267ccb0e2e66a02de.png

history

history [-c] [-d offset] [n]

-c :清空命令历史

-d offset :删除指定偏移量的历史条目

n  :显示历史中最近的n 条命令

-a:

3c8ce6380daa33c267ccb0e2e66a02de.png

调用历史中的命令

!# :重复执行第# 条指令

!! :重复执行上一条命令

! !string :执行历史中以string 开头的第一条匹配到的命令

命令别名

通过alias命令实现

1 )alias

显示当前shell 进程所有可用的命令别名

2 )alias NAME='VALUE'

定义别名NAME

3 )unalias NAME,unalias -a

撤销别名   撤销所有定义别名

3c8ce6380daa33c267ccb0e2e66a02de.png

通过命令行定义的命令别名只对当前shell有效,命令别名要想永久生效就需要编译到配置文件里面。

仅对当前用户有效:~/.bashrc

对所有用户有效:/etc/bashrc

3c8ce6380daa33c267ccb0e2e66a02de.png

4 )bash进程重新读取配置文件,文件配置好了要立即生效。

3c8ce6380daa33c267ccb0e2e66a02de.png

glob通配符

*  :任意长度的任意字符

?:任意单个字符

[] :匹配指定范围内的任意单个字符

[]  :匹配指定范围内的任意单个字符

[0-9]

[a-z] :不区分字符大小写

[A-Z] :大写字母

[^] :匹配指定范围外的任意单个字符

[^0-9]

专用字符集合

[[:digit:]]:任意数字,相当于0-9

[[:lower:]]:任意小写字母

[[:upper:]]: 任意大写字母

[[:alpha:]]: 任意大小写字母

[[:alnum:]]:任意数字或字母

[[:space:]]: :

[[:punct:]]:标点符号

bash快捷键

Ctrl+l:  清屏,相当于clear 命令;

Ctrl+a:跳转至命令开始处;

Ctrl+e:跳转至命令结尾处;

Ctrl+c:取消命令的执行

命令行展开:

~ :展开为用户的家目录

~USERNAME :展开为指定用户的主目录

{ } :可承载一个以逗号分隔的列表,并将其展开为多个路径

/tmp/{a,b}=/tmp/a,/tmp/b

bash的输入输出及管道

标准输入:keyboard ,0

标准输出:monitor ,1

标准错误输出:monitor ,2

标准输出追加: >>

输出重定向:COMMAND > NEWPOS, COMMAND >> NEWPO

> :覆盖重定向,目标文件中的原有内容会被清除;

>>:  追加重定向,新内容会追加至目标文件尾部;

例子:使用输出重定向将/boot目录的内容保存到/root/abc文件中

3c8ce6380daa33c267ccb0e2e66a02de.png

说明,没有目标文件会自动创建一个文件

# set -C:禁止将内容覆盖输出至已有文件中;

强制覆盖:>|

# set +C:禁止将内容覆盖输出至已有文件中;

标准输出和错误输出各自指向不同的位置

3c8ce6380daa33c267ccb0e2e66a02de.png

像这样错误输出就不能重定向了,所以要使用错误输出用的符号

2>:  覆盖重定向错误输出数据流;

2>>:  追加重定向错误输出数据流;

3c8ce6380daa33c267ccb0e2e66a02de.png

合并正确和错误的输出数据流

COMMAND > /path/to/file.out 2>&1

COMMAND >> /path/to/file.out 2>&1

输入重定向

tr 命令:转换或删除字符

tr [OPTION]... SET1 [SET2]

将/etc/fstab文件的中小写字母变成大写

3c8ce6380daa33c267ccb0e2e66a02de.pngHERE Documentation :<< (可用于生成文档,并以此为结束的标志) # cat << EOF # cat > /path/to/somefile << EOF

管道

COMMAND1 | COMMAND2 | COMMAND3

注意:最后一个命令会在当前shell 进程的子shell 进程中执行

bash变量

构成:变量名+指向内存空间

赋值:name=value,将此字符串存到所指存储空间

引用:${name},$name

替换:将变量名出现的位置替换为其所指向的内存空间的数据

强弱类型

静态语言: 编译型语言

强类型(变量)

事先转换成可执行格式

c\c++\JAVA\c#

动态语言: 解释性语言

弱类型

边解释边执行

asp/asp.net/php/shell/python/perl

Shell: 弱类型编程语言

强类型: 变量在使用前,必须事先声明,甚至还需要初始:

弱类型: 变量用时声明,甚至不区分类型:

根据生效范围分类

本地变量:

生效范围为当前shell 进程;对当前shell 之外的其它shell 进程,包括当前shell 的子shell 进程均无效;

环境变量:生效范围为当前shell 进程及其子进程;

局部变量:生效范围为当前shell 进程中某代码片断( 通常指函数);

位置变量:

$1, $2, ... 来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数;

特殊变量:$?, $0, $*, $@, $#

位置变量

在脚本代码中调用通过命令行传递给脚本的参数

$1,$2,... :对应调用第1 ,第2 等参数

$#:

它可抓出positional parameter 的数量,即在脚本后面的参数有几个

$0 :脚本本身的名字

$@ :传给脚本的所有参数

$*:

是以一个单字符串显示里所有向脚本传递的参数,与位置参数不同,参数可超过9个 个

$$:是脚本运行的当前进程的ID号 号

$?:显示最后命令的退出状态

本地变量:

1) 变量赋值:name='value', 其中的value 可以为

a. 可以使直接字串:name="username"

b. 变量引用:name="$username"

c. 命令引用:name=`COMMAND` (单反引号)或者

name=$(COMMAND)

2) 变量引用:${name},$name

" ":  弱引用,其中的变量引用会被替代为变量值

' ':  强引用,其中的变量引用不会被替换为变量值,而保持原字符串

3)显示已经定义的所有变量:

set

撤销变量 unset name

环境变量

1)变量声明,赋值

export name=VALUE

declare -x name=VALUE (-x: to make NAMEs export)

2)变量引用:$name,${name}

3) 显示所有环境变量:

export

env

printenv

4) 只读变量

readonly name

declare -r name  (-r :to make NAMEs readonly)

配置文件

按生效范围划分,存在两类:

全局配置:

/etc/profile

/etc/profile.d/*sh

/etc/bashrc

个人配置

~/.bash_profile

~/.bashrc

按功能划分,存在两类;

1)profile 类:为交互式登录的shell 提供配置

全局:/etc/profile,/etc/profile.d/*.sh

个人:~/.bash_profile

功能:用于定义环境变量

要执行的命令或脚本

2)bashrc 类:为非交互式登录的shell 提供配置

全局:/etc/bashrc

个人:~/.bashrc

功能:定义命令别名

定义本地变量

读取顺序

交互式:

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

非交互式:

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

编辑配置文件定义的新配置的生效方式:

重新启动shell 进程;

使用source 或. 命令进程;

source Or . filename [arguments]

shell 登录

交互式登录:

直接通过终端输入账号密码登录

使用“ “su - UserName” ” 或“ “su -l UserName” ” 切换的用户

非交互式登录

su UserName

图形界面下打开的终端

shell脚本之基础练习

1、写一个脚本计算/etc/passwd文件中的第10个用户和第20个用户的id号之和;

3c8ce6380daa33c267ccb0e2e66a02de.png

2、写一个脚本计算/etc/rc.d/init.d/functions和/etc/inittab文件的空白行数之和;

3c8ce6380daa33c267ccb0e2e66a02de.png

利用bash -n 2.sh检查一下有无语法错误

利用bash -x 2.sh查看

3c8ce6380daa33c267ccb0e2e66a02de.png

3、将当前主机名称保存至hostName变量中;主机名如果为空,或者为localhost.localdomain,则将其设置为www.yezi.com;

3c8ce6380daa33c267ccb0e2e66a02de.png

4、写一脚本,通过命令传递两个文本文件路径给脚本,计算其空白行数之和;

3c8ce6380daa33c267ccb0e2e66a02de.png

演示结果如下:

3c8ce6380daa33c267ccb0e2e66a02de.png

原创文章,作者:N24_yezi,如若转载,请注明出处:http://www.178linux.com/60352

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值