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
下一篇 2017-08-11

相关推荐

  • Linux文本处理三剑客之grep

    一、grep命令 grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来 作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行。 模式:由正则表达式字符及文本字符所编写的过滤条件 二、grep命令格式 grep [OPT…

    Linux干货 2016-08-15
  • Linux网络简单设置

     修改IP地址:临时修改IP地址(centenos 7以前版本)ifconfig eth0 x.x.x.x netmask x.x.x.x                   修改…

    Linux干货 2017-08-19
  • N25第五周 grep 和find 命令使用示例

    1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;    [root@localhost grub]# grep "^[[:space:]]\+.*" grub.conf    root (hd0,0)…

    Linux干货 2016-12-25
  • 第十周

    1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情) 1.POST 开机加电自检,对计算机的cpu,硬盘,内存等进行检测。 2.BIOS 对引导程序进行探测,并把控制权交给引导程序。 3.MBR Master bootloader record主引导程序.通常位于硬盘第一扇区/dev/hda(0,0)或/dev/sda(0,0). 此阶…

    Linux干货 2017-03-30
  • 【典韦文章】zabbix实现微信报警

    作者 典韦,追马代发 一、注册微信公众号 首先申请微信公众平台https://mp.weixin.qq.com/一个人最多申请5个公众号,所以还是可以的 申请完之后就可以根据腾讯的提示使用微信公众号了,然后用你自己的微信扫描关注微信号。 就可以看到用户数了,接下来的就要使用的用户的微信ID号了。点击用户查看用户的微信ID号。在浏览器查看用户的微信ID号。就是…

    Linux干货 2015-08-24
  • Docker入门

    一、Docker 架构 Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。 Docker 容器通过 Docker 镜像来创建。 容器与镜像的关系类似于面向对象编程中的对象与类。 Docker 面向对象 容器 对象 镜像 类 Docker 镜像(Images) Docker 镜像是用于创建 Docker 容器的…

    2018-01-20