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)
上一篇 2017-08-11 19:31
下一篇 2017-08-11 20:23

相关推荐

  • 马哥教育网络21期+第十三周练习博客

        马哥教育网络21期+第十三周练习博客 1、建立samba共享,共享目录为/data,要求:(描述完整的过程) 1)共享名为shared,工作组为magedu; 在服务器上安装samba ]# yum install samba 创建共享目录/data 启动samba的nmb和smb…

    Linux干货 2016-10-31
  • 设定Linux自动登陆

    设定Linux自动登陆 在实验场景中我们可能会经常重新启动Linux,然后反复输入账户密码登陆。为了在每次启动后快速进入系统减少在实验场景中不必要的工作,我们可以设定Linux在启动后自动登陆到指定账户(实验中一般为root账户)。基于Linux一切皆文件的思想,我们可以通过修改配置文本的方式决定是否启用自动登录,以及自动登录的账户是普通用户账户还是root…

    Linux干货 2017-07-15
  • linux 第二周

     一. 文件管理       文件被组织到文件系统(file system)中,通常会成为一个树状(tree)结构。Linux有一个根目录/, 也就是树状结构的最顶端。这个树的分叉的最末端都代表一个文件,而这个树的分叉处则是一个目录(directory, 相当于我们在windows界面中看到的文件夹)。在图1…

    Linux干货 2017-05-29
  • LVS调度方法

    lvs scheduler:     根据其调度时是否考虑后端主机的当前负载,可分为静态方法和动态方法     静态方法:仅根据算法本身进行调度:         RR:Round Ronin 轮询         WRR:Weighted…

    Linux干货 2017-01-10
  • PHP数组实际占用内存大小的分析

    我们在前面的php高效写法提到,尽量不要复制变量,特别是数组。一般来说,PHP数组的内存利用率只有 1/10, 也就是说,一个在C语言里面100M 内存的数组,在PHP里面就要1G。下面我们可以粗略的估算PHP数组占用内存的大小,首先我们测试1000个元素的整数占用的内存: <?php      &nb…

    系统运维 2015-05-28
  • 马哥教育网络班22期+第三周课程练习

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

    Linux干货 2016-08-29