使用read命令来接受输入
使用read来把输入值分配给一个或多个shell变量
read后面跟变量,回车输入内容,就可以把输入的内容赋给变量
-p指定要显示的提示
-s 静默输入,一般用于密码
输入的内容不显示
-n N 指定输入的字符长度N
当输入的内容达到了5个字符会直接结束输入
-d‘字符’ 输入结束符
把!作为了结束符,在输入内容时,当输入!会直接结束输入
-t N TIMEOUT为N秒
如果不输入内容,10s后自动退出
read从标准输入中读取值,给每个单词分配一个变量
所有剩余单词都被分配给最后一个变量
read 变量名1 [变量名2] < 文件名
read不支持管道
read 变量名1 [变量名2] <<< “值1 [值2] …”
< 后面跟的是文件 <<< 后面跟的是变量的值
bash如何展开命令行
把命令行分成单个命令词
展开别名
展开大括号的声明({})
展开波浪符声明(~)
命令替换$()和“)
再次把命令行分成命令词
展开文件通配(*、?、[abc]等等)
准备I/0重导向(<、>)
运行命令
防止扩展
反斜线(\)会使随后的字符按原意解释(完全转译)
$ echo Your cost:\$5.00
Your cost:$5.00
不加反斜杠系统会把$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
在这几个文件分别设置环境变量A,B,C,D,E
没有重新登陆时,这几个变量就不会生效,echo $A $B $C $D $E,什么都不显示。重新登陆后,这几个变量就会生效。
用非交互式登陆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的值。
在root用户下,将变量A的值改为A6,变量B的值改为B7,变量D的值改为D9,变量E的值改为E10,
然后不退出重新登陆,直接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,又因为变量D在root用户的家目录里,所以不读取,不更新变量D的值。变量E5的值为E10,是因为继承了上一个shell的变量D的值,又读取/etc/bashrc所以更新变量E的值,所以变量E的值为E10.
在用交互式登陆guanyu用户,echo这几个变量,不继承上一个shell,只读取文件,因为是交互式登陆,所以/etc/profile,/etc/profile.d/mage.sh,/etc/bashrc这几个文件都能读取,所以变量A,B,E的值为A6,B7,E10,又因为变量C,D都在root用户的家目录里,所以不能读取,变量C,D的值为空。
给变量PATH增加内容,不能直接用”PATH=内容“,这样会覆盖掉原本的变量值,应该用“PATH=$PATH:内容”
Profile类
按功能划分,存在两类:
profile类和bashrc类
profile类:为交互式登录的shell提供配置
全局:/etc/profile, /etc/profile.d/*.sh
个人:~/.bash_profile
功用:
(1) 用于定义环境变量
(2) 运行命令或脚本
Bashrc类
bashrc类:为非交互式和交互式登录的shell提供配置
全局:/etc/bashrc
个人:~/.bashrc
功用:
(1) 定义命令别名和函数
(2) 定义本地变量
编辑配置文件生效
修改profile和bashrc文件后需生效
两种方法:
1重新启动shell进程
2 . 或source
例:
. ~/.bashrc
$-变量
h:hashall,打开这个选项后,Shell 会将命令所在的路径hash下来,避免每次都要查询。通过set +h将h选项关闭,开启是set -h
i:interactive-comments,包含这个选项说明当前的shell 是一个交互式的shell。所谓的交互式shell,在脚本中,i选项是关闭的。
m:monitor,打开监控模式,就可以通过Job control来控制进程的停止、继续,后台或者前台执行等。
B:braceexpand,大括号扩展
H:history,H选项打开,可以展开历史列表中的命令,可以通过!感叹号来完成,例如“!!”返回上最近的一个历史命令,“!n”返回第n 个历史命令
原创文章,作者:fuming,如若转载,请注明出处:http://www.178linux.com/84399