bash特性之基础

bash shell

命令历史history

环境变量:

HISTSIZE :命令历史记录的条数
HISTFILE :~/.bash_history
HISTFILESIZE:

显示环境变量:echo 

bash特性之基础 

环境变量的修改:export 

bash特性之基础

history

history [-c] [-d offset] [n]
 -c :清空命令历史
 -d offset :删除指定偏移量的历史条目
  n  :显示历史中最近的n 条命令
 -a:

bash特性之基础

调用历史中的命令

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

命令别名

通过alias命令实现

1 )alias
显示当前shell 进程所有可用的命令别名
2 )alias NAME='VALUE'
定义别名NAME
3 )unalias NAME,unalias -a
撤销别名   撤销所有定义别名

bash特性之基础

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

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

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

bash特性之基础

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

bash特性之基础

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文件中 

bash特性之基础

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

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

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

bash特性之基础

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

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

bash特性之基础

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

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

输入重定向

tr 命令:转换或删除字符
tr [OPTION]... SET1 [SET2]

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

bash特性之基础HERE 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号之和;

bash特性之基础

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

bash特性之基础

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

利用bash -x 2.sh查看

bash特性之基础

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

bash特性之基础

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

bash特性之基础

演示结果如下: 

bash特性之基础

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

(0)
N24_yeziN24_yezi
上一篇 2016-11-22 12:50
下一篇 2016-11-22 13:00

相关推荐

  • M20 – 1- 第二周(2):课堂练习与作业

    课堂练习: 1、显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件和目录 [root@centos6 ~]# ls /var/l*[[:digit:]]*[[:lower:]] ls: cannot access /var/l*[[:digit:]]*[[:lower:…

    Linux干货 2016-08-02
  • 如何在微软Azure云机上添加新磁盘

    大家好: 最近在项目实践中,分享下如何在微软Azure云机上添加新磁盘。 首先需要查看下是否有未用上的磁盘,先fdisk -l查(看下图)并和Azure技术确认该磁盘是否可永久保存数据: 然后找到未分区的磁盘号,如上图中的/dev/sdc,再 fdisk /dev/sdc后开始在该新磁盘上进行分区创建: 为方便管理,我们一般就创建一个分区,然后进行格式化: …

    Linux干货 2016-11-27
  • shell脚本编程基础之二(if、case、for、while、until、continue、break语句使用)

    在shell脚本编程中,我们可以根据命令的状态结果,判断要不要执行下一步,但是有时候要判断的问题不止一个,甚至对问题本身都要做判断;同时问题的结果有时也不止一个,这时要借助简单的逻辑与和逻辑或,就显得很无力;要完成复杂的任务,需要借助一定的流程控制:顺序执行、选择执行、循环执行、同时在脚本执行过程中,有用户交互输入的需; if语句 case语句 for语句 …

    Linux干货 2016-08-21
  • 网络26期 第五周作业

    1. 显示当前系统上root、fedora或user1用户的默认shell egrep -o “^(root|fedora|user1)\>.*[^:]+$” /etc/passwd | cut -d: -f1,7 2. 找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello(…

    2017-03-13
  • 马哥教育网络班21期-第九周课程练习

    "1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash # declare -i login_user=0 declare -i nologin_user=0 whil…

    Linux干货 2016-09-15
  • 使用Openssl构建私有CA

    使用Openssl构建私有CA Openssl是SSL的开源实现,是一种安全机密程序,主要用于提高远程登录访问的安全性。也是目前加密算法所使用的工具之一,功能很强大。     Openssl为网络通信提供安全及数据完整性的一种安全协议,包括了主要的密码算法、常用的密钥和证书封装管理功能(CA)以及SSL协议,并提供了丰…

    Linux干货 2015-10-07

评论列表(1条)

  • luoweiro
    luoweiro 2016-12-01 00:06

    对于配置文件读取顺序,希望自己能通过调试或者读代码来掌握,比如加一些echo信息,你在执行的过程中能很明显看到读取的文件。