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

相关推荐

  • 企业面试题

    要求: 将一下数据进行排序(字母部分已小到大排序) 101.37.8.249 wz417-419/wz119-125/wz7-16/wz571/wz544/wz1-6101.37.21.19 wz545/wz453-456/wz441-444116.62.4.21 wz106-118/wz514-516/wz581/wz190-199/wz572101.37…

    Linux干货 2017-06-27
  • 搭建CA服务器为Client签发证书

    搭建CA服务器为Client签发证书   此次实验步骤如下: 一、搭建CA服务器 1)  在/etc/pki/CA下创建index.txt文件,此文件是为Client签发证书的索引文件; 2)  在/etc/pki/CA下创建serial文件,此文件记录为Client签发证书的编号; 3)  生成CA服务器私钥; 4)…

    2017-05-21
  • 第一周作业

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

    Linux干货 2017-12-03
  • lvm基本应用,扩展及缩减实现

    一、    LVM的创建     LVM因为他的可扩展和可伸缩的特性,被广泛的应用于磁盘管理中,创建LVM则必须先创建pv然后创建vg最后才能创建lv,他们之间的关系如下:呈金字塔结构     1、创建查看pv     …

    Linux干货 2016-03-09
  • shell脚本编写-3

    1、for循环 for 变量名 in  列表;do 循环体 done 执行机制:依次将列表中元素赋值给“变量名”;每次赋值后即执一次循环体;直到列表中元素耗尽循环结束 列表生成方式: (1) 直接给出列表 (2) 整数列表: (a){start..end} (b) $(seq [start [step]] end)  (3) 返回列表的命…

    Linux干货 2016-08-18
  • sed的用法小结

    sed的用法小结 sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等sed [OPTION]… ‘script’ [input-file] … OPTION: -n 不输出模式空间中的内容至屏幕,仅显示script处理后的结果 -e 多点编辑,eg: ~]# sed -e ‘s@^#[[…

    Linux干货 2017-08-22