bash的一些特性

bash的字符串处理工具

字符串切片:

${var:offset:number}

取字符串的子串;

取字符串的最右侧的几个字符:${var: -length}

注意:冒号后必须有一个空白字符;



基于模式取子串;

${var#*word}:

其中word是指定的分隔符;功能:自左而右,查找var变量中所存储的字符串中,第一次出现word分隔符,删除字符串开头至此分隔符之间的所有字符;


${var##*word}:

其中word是指定的分隔符;功能:自左而右,查找var变量中所存储的字符串中,最后一次出现word分隔符,删除字符串开头至此分隔符之间的所有字符;


mypath="/etc/init.d/funtions"

${mypath##*/}:funtions

${mypath#/}:etc/init.d/functions

${var%word*}:

其中word是指定的分隔符;功能:自右而左,查找var变量中所存储的字符串中,第一次出现word分隔符,删除此分隔符至字符串尾部 的所有字符;

${var%%word*}:

其中word是指定的分隔符;功能:自右而左,查找var变量中所存储的字符串中,最后一次出现word分隔符,删除此分隔符至字符串尾部 的所有字符;

=================================

mypath="/etc/inita.d/functions"

${mypath$/*}:/etc/init.d

url=http://www.magedu.com:80

${url##*:}

${url%%:*}

================================

查找替换:

${var/pattern/substi}:

查找var所表示的字符串中,第一次被pattern所匹配到的字符串,将其替换为substi所表示的字符串;

${var//pattern/substi}:

查找var所表示的字符串中,所有被pattern所匹配到的字符串,全部替换为substi所表示的字符串;

${var/#pattern/substi}:

查找var所表示的字符串中,行首被pattern所匹配到的字符串,将其替换为substi所表示的字符串;

${var/%pattern/substi}:

查找var所表示的字符串中,行尾被pattern所匹配到的字符串,将其替换为substi所表示的字符串;

注意:pattern中使用glob风格和通配符;


查找删除:

${var/pattern}:

以pattern为模式查找var字符串中第一次的匹配,并且删除之

${var//pattern}:

以pattern为模式查找var字符串中所有匹配到的字符串,并且删除之

${var/#pattern}:

以pattern为模式查找var字符串中行首所匹配到的字符串,并且删除之

${var/%pattern}:

以pattern为模式查找var字符串中行尾所匹配到的字符串,并且删除之


字符大小写转换:

${var^^}:

把var中的所有小写字符转换为大写;

${var,,}:

把var中的所有大写字符转换为小写;


变量赋值:

${var:-value}:

如果var变量为空或未设置;那么返回value,否则,则返回var变量的值

${var:=value}:

如果var变量为空或未设置;那么返回value,并将value赋值给var变量;否则,则返回var变量的值

${var:+value}:

如果var变量不空;则返回value;

${var:?ERROR_INFO}:

如果var为空,或未设置,那么返回error_info为错误提示;否则,返回var值



高级变量用法

hell变量一般是无类型的,但是bash Shell提供了declare和

typeset两个命令用于指定变量的类型,两个命令是等价的

declare [选项] 变量名

-r 将变量设置为只读属性

-i 将变量定义为整型数

-a 将变量定义为数组

-A 将变量定义为关联数组

-f 显示此脚本前定义过的所有函数名及其内容

-F 仅显示此脚本前定义过的所有函数名

-x 将变量声明为环境变量

-l 将变量值转为小写字母 declare –l var=UPPER

-u 将变量值转为大写字母 declare –u var=lower


间接变量引用

如果第一个变量的值是第二个变量的名字,从第一个变量引

用第二个变量的值就称为间接变量引用

variable1=variable2

variable2=value

variable1的值是variable2,而variable2又是变量名,

variable2的值为value,间接变量引用是指通过variable1获

得变量值value的行为

bash Shell提供了两种格式实现间接变量引用

eval tempvar=\$$variable1

tempvar=${!variable1}

示例:

[root@server ~]# N=NAME

[root@server ~]# NAME=ali

[root@server ~]# N1=${!N}

[root@server ~]# echo $N1

ali

[root@server ~]# eval N2=\$$A

[root@server ~]# echo $N2

ali


命令行展开

把命令行分成单个命令词

展开别名

展开大括号种的声明( {})

展开波浪符声明( ~)

命令替换$() 和 “)

再次把命令行分成命令词

展开文件通配( *、 ?、 [abc]等等)

准备I/0重导向( <、 >)

运行命令

防止扩展

反斜线( \)会使随后的字符按原意解释

$ echo Your cost: \$5.00

Your cost: $5.00

加引号来防止扩展

单引号( ’)防止所有扩展

双引号( ”)也防止所有扩展,但是以下情况例外:

$(美元符号) - 变量扩展

`(反引号) - 命令替换

\(反斜线) - 禁止单个字符扩展

!(叹号) - 历史命令替换



bash的配置文件

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

全局配置:

/etc/profile

/etc/profile.d/*.sh

/etc/bashrc

个人配置:

~/.bash_profile

~/.bashrc

shell登录两种方式

交互式登录:

(1)直接通过终端输入账号密码登录;

(2)使用“ su – UserName” 切换的用户

执行顺序:

/etc/profile –> /etc/profile.d/*.sh –>

~/.bash_profile –> ~/.bashrc –> /etc/bashrc

非交互式登录:

(1)su UserName

(2)图形界面下打开的终端

(3)执行脚本

执行顺序:

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

Profile类

按功能划分,存在两类:

profile类和bashrc类

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

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

个人: ~/.bash_profile

功用:

(1) 用于定义环境变量

(2) 运行命令或脚本

Bashrc类

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

全局: /etc/bashrc

个人: ~/.bashrc

功用:

(1) 定义命令别名和函数

(2) 定义本地变量

编辑配置文件生效

修改profile和bashrc文件后需生效

两种方法:

1重新启动shell进程

2 . 或source

例:

~/.bashrc

Bash 退出任务

保存在~/.bash_logout文件中(用户)

在退出登录shell时运行

用于

创建自动备份

清除临时文件


原创文章,作者:M20-1马星,如若转载,请注明出处:http://www.178linux.com/39405

(0)
M20-1马星M20-1马星
上一篇 2016-08-24 21:22
下一篇 2016-08-24 21:22

相关推荐

  • Nginx之ngx_http_proxy_module模块详解

    一、正反向代理简介       1、正向代理:局域网内的机器借助于代理服务器访问局域网外的网站          这时正向代理的功能:         &nbs…

    2017-06-25
  • Linux系统之用户和组

    Linux系统之用户和组 1、什么是用户 用户:资源获取标识符,资源分配,安全权限模型的核心要素之一 2、没有用户,操作系统可否正常执行? 答案是肯定的 在Linux系统上,用户管理是基于用户名和密码的方式进行资源的分配, Username/UID分为以下类别:     管理员:root, 0  &…

    Linux干货 2016-08-04
  • 马哥教育网络班20期+第3周课程练习

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@localhost ~]# who root     pts/0        2016-06-23&nb…

    Linux干货 2016-06-29
  • CentOS6.7上编译安装php

    环境:CentOS6.7,minimal安装。 前提条件:安装了编译环境,安装了Apache/Nginx,安装了MySQL/MariaDB。具体安装见:http://www.178linux.com/16583    http://www.178linux.com/17497  1、解决依赖关系: 请配置好yum源(系统安装源及…

    Linux干货 2016-06-03
  • linux高级文件管理系统

    磁盘配额:    linux是一个多用户的系统,磁盘配额是分配给每个用户的磁盘可用空间的限制。每一用户只能使用最大配额范围内的磁盘空间。root是不受配额限制的,只有普通用户才受限制。   Quota是在RedHatlinux下实现linux磁盘配额的工具,它支持单独的挂载文件系统,而不是一个目录。quota默认是安装的,如果没…

    Linux干货 2016-09-02
  • N29第一周作业:初识Linux系统

    1、描述计算机的组成及其功能。
    2、按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别。
    3、描述Linux的哲学思想,并按照自己的理解对其进行解释性描述。
    4、说明Linux系统上命令的使用格式;详细介绍ifconfig、echo、tty、startx、export、pwd、history、shutdown、poweroff、reboot、hwclock、date命令的使用,并配合相应的示例来阐述。
    5、如何在Linux系统上获取命令的帮助信息,请详细列出,并描述man文档的章节是如何划分的。
    6、请罗列Linux发行版的基础目录名称命名法则及功用规定

    2018-03-04