shell脚本2

使用read命令来接受输入

使用read来把输入值分配给一个或多个shell变量

shell脚本2

read后面跟变量,回车输入内容,就可以把输入的内容赋给变量


-p指定要显示的提示

shell脚本2


-s 静默输入,一般用于密码

shell脚本2

输入的内容不显示


-n N 指定输入的字符长度N

shell脚本2

当输入的内容达到了5个字符会直接结束输入


-d‘字符输入结束符

shell脚本2

把!作为了结束符,在输入内容时,当输入!会直接结束输入


-t N TIMEOUT为N秒

shell脚本2

如果不输入内容,10s后自动退出


read从标准输入中读取值,给每个单词分配一个变量

所有剩余单词都被分配给最后一个变量

shell脚本2


read 变量名1 [变量名2] < 文件名

shell脚本2


read不支持管道


read 变量名1 [变量名2] <<< “值1 [值2] …”

shell脚本2


< 后面跟的是文件 <<< 后面跟的是变量的值

 

 


bash如何展开命令行

把命令行分成单个命令词

展开别名

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

展开波浪符声明(~)

命令替换$()和“)

再次把命令行分成命令词

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

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

运行命令

 



防止扩展

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

$ echo Your cost:\$5.00

Your cost:$5.00

shell脚本2

不加反斜杠系统会把$5当成一个变量,但这个变量没有值,则为空,而加上反斜杠,就把$按原意解释,所以$5不变。

加引号来防止扩展

单引号()防止所有扩展(完全转译)

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

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

`(反引号)-命令替换

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

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

 



bash的配置文件

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

全局配置:

/etc/profile

/etc/profile.d/*.sh

/etc/bashrc

个人配置:

~/.bash_profile

~/.bashrc

 



shell登录两种方式

交互式登录:(不能继承上一个shell)

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

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

执行顺序:/etc/profile –> /etc/profile.d/*.sh –> ~/.bash_profile–> ~/.bashrc–> /etc/bashrc

非交互式登录:(继承上一个shell)

(1)suUserName

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

(3)执行脚本

(4)任何其它的bash实例

执行顺序:~/.bashrc–> /etc/bashrc–> /etc/profile.d/*.sh

shell脚本2

在这几个文件分别设置环境变量A,B,C,D,E

shell脚本2

没有重新登陆时,这几个变量就不会生效,echo $A   $B $C $D $E,什么都不显示。重新登陆后,这几个变量就会生效。

shell脚本2

用非交互式登陆guanyu用户,就会继承上一个shell,所以echo 5个变量都会显示。而用交互式登陆guanyu用户,不能继承上一个shell,就只能读取/etc/profile /etc/profile.d/*.sh ~/.bash_profile~/.bashrc/etc/bashrc这几个文件,而变量C,D都是在用户root的家目录设置的,只能读取到变量A,B,E,所以echo这几个变量只显示变量A,B,E的值。

shell脚本2

root用户下,将变量A的值改为A6,变量B的值改为B7,变量D的值改为D9,变量E的值改为E10

shell脚本2

然后不退出重新登陆,直接echo这几个变量,当然不变,因为这几个变量没有生效,此时用非交互式登陆切到guanyu用户下,变量A的值不变,尽管,变量A的值变为A6,但是用非交互式登陆,继承了上一个shell变量A的值A1,但是不读取/etc/profile这个文件,所以不更新变量A的值,变量B的值变为B7,是因为继承了上一个shell变量B的值然后读取/etc/profile.d/mage.sh这个文件,更新变量B的值。变量C3的值不变,变量D的值为D4,是因为继承了上一个shell的变量D的值D4,又因为变量Droot用户的家目录里,所以不读取,不更新变量D的值。变量E5的值为E10,是因为继承了上一个shell的变量D的值,又读取/etc/bashrc所以更新变量E的值,所以变量E的值为E10. 

shell脚本2

 shell脚本2

在用交互式登陆guanyu用户,echo这几个变量,不继承上一个shell,只读取文件,因为是交互式登陆,所以/etc/profile,/etc/profile.d/mage.sh,/etc/bashrc这几个文件都能读取,所以变量A,B,E的值为A6B7E10,又因为变量C,D都在root用户的家目录里,所以不能读取,变量C,D的值为空。

 


给变量PATH增加内容,不能直接用PATH=内容“,这样会覆盖掉原本的变量值,应该用PATH=$PATH:内容

shell脚本2

 

 



Profile类

按功能划分,存在两类:

profile类和bashrc

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

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

个人:~/.bash_profile

功用:

(1) 用于定义环境变量

(2) 运行命令或脚本

 



Bashrc类

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

全局:/etc/bashrc

个人:~/.bashrc

功用:

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

(2) 定义本地变量

 



编辑配置文件生效

修改profilebashrc文件后需生效

两种方法:

1重新启动shell进程

2 . source

:

. ~/.bashrc

 




$-变量

hhashall,打开这个选项后,Shell 会将命令所在的路径hash下来,避免每次都要查询。通过set +hh选项关闭,开启是set -h

shell脚本2

iinteractive-comments,包含这个选项说明当前的shell 是一个交互式的shell。所谓的交互式shell,在脚本中,i选项是关闭的。

mmonitor,打开监控模式,就可以通过Job control来控制进程的停止、继续,后台或者前台执行等。

Bbraceexpand,大括号扩展

shell脚本2

HhistoryH选项打开,可以展开历史列表中的命令,可以通过!感叹号来完成,例如“!!”返回上最近的一个历史命令,“!n”返回第n 个历史命令

shell脚本2

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

(0)
fumingfuming
上一篇 2017-08-11 19:31
下一篇 2017-08-11 20:23

相关推荐

  • sed命令的入门与进阶

    sed:Stream EDitor     什么是sed呢?sed被称为linux文本处理三剑客之一,另外两个就是大名鼎鼎的grep和awk。sed是非交互性的流编辑器,在处理文本时一次只读取一行文本,然后基于所给定的编辑脚本对模式空间中的内容做编辑处理并把处理后的结果输出至标准输出。接着处理下一行文本,这样不断重复,直到文件的末尾。se…

    2017-03-16
  • 编译安装bind9

    一、下载bind9.9.5源码包     可以通过www.isc.org站点来获得源码包。 二、将源码包解压到任意目录     源码包通常都是.tar.gz文件,因此我们需要先将其解压: 三、编译安装bind     1、安装前的准备工作 …

    Linux干货 2015-05-05
  • 文件权限

    首先简单介绍一下文件的属性: 使用ls -l 长列出-rw-r–r–. 1 root root 1302 Jul 25 10:23 group文件类型|owner权限group权限other权限|硬链接数|owner|group|文件大小(bytes)|mtime|文件名 文件类型:     &…

    2017-07-29
  • Mysql 多表联合查询效率分析及优化

    1. 多表连接类型 1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','  如:  SELECT * FROM table1 CROSS JOIN table2  &nb…

    Linux干货 2015-04-13
  • rsyslog日志存储到mysql数据库中并利用loganalyzer进行web图形化分析管理

    概述     系统日志的重要性,相信大家都深有体会,当发生故障后,第一时间就是查看相关报错信息和日志信息,以定位问题所在,还可以基于日志,进行日志的分析,从而获取系统运行状态的一些规律,本篇就介绍关于系统日志的先关内容,具体分为:     1、rsyslog相关概念的介绍 &nb…

    Linux干货 2016-10-18
  • N23-第三周博客作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@localhost ~]# who | cut -d' ' -f1 | sort -u 2、取出最后登录到当前系统的用户的相关信息。 [root@localhost ~]# last -1 | head -1 3、取出当前系统上被用户当…

    Linux干货 2016-12-05