版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/play_chess_ITmanito/article/details/76912336
(1)变量替换:
根据变量的状态(是否定义,赋值,为空)来进行替换
形式 说明
${var} 变量本来的值
${var:-hello} 如果var变量为空或者已经被unset之后,返回hello,但是不改变var的值
${var:=hello} 如果var变量为空或者已经被unset之后,返回hello,并将var的值设置为hello
${var:?message} 如果var变量为空或者已经被unset之后,则将message消息送到标准错误输出界面,主要用来检查变量var是否可以被正常赋值
${var:+hello} 如果变量var被定义之后,返回hello,但是不改变var的值
eg1:vi a.sh
#!/bin/bash
var=1
unset var
echo ${var:-"变量没被赋值"}
echo "1---变量值是${var}"
结果:
[root@h data]# chmod +x ./a.sh
[root@h data]# ./a.sh
变量不会被赋值
1--变量值是
eg2:
var="hello"
unset var
echo ${var:="变量被赋值"}
echo "2---变量值是${var}"
结果:
[root@h data]# vi a1.sh
[root@h data]# /bin/sh a1.sh
变量被赋值
2---变量值是变量被赋值
eg3:
var=1
unset var
echo ${var:+"这是默认值"}
echo "3---变量值是${var}"
结果:
[root@h data]# vi a2.sh
[root@h data]# /bin/sh a2.sh
3---变量值是
eg4:
var="hello shell"
echo ${var:+"这是默认值"}
echo "4---变量值是${var}"
echo ${var:?"返回message吗"}
echo "5---变量值是${var}"
结果:
[root@h data]# vi a3.sh
[root@h data]# /bin/sh a3.sh
这是默认值
4---变量值是hello shell
hello shell
5---变量值是hello shell
eg5:
var="hello shell"
echo ${var:+"这是默认值"}
echo "4---变量值是${var}"
unset var
echo ${var:?message}
echo "5---变量值是${var}"
结果:
[root@h data]# /bin/sh a4.sh
这是默认值
4---变量值是hello shell
a3.sh: line 6: var: message
(2)命令替换:
☞shell脚本可以先执行命令,将输出结果暂时保存,在合适的地方输出
命令替换的格式:
`命令`
查看并且修改Linux系统时间
查看系统时间:
[root@h data]# date
Tue Jun 27 19:02:52 CST 2017
设置系统时间:
[root@h data]# date -s "20170727 09:50:40"
Thu Jul 27 09:50:40 CST 2017
eg1:
#!/bin/bash
d=`date`
echo "d 是$d"
统计该虚拟机的用户数:
[root@h data]# who | wc -l
4
eg2:(把命令执行结果保存到变量中)wordcount
#!/bin/bash
user=`who | wc -l`
echo "登录的用户数是$user"
eg3:
ls=`ls | wc`
echo "结果1:$ls"
l=`ls | wc -l`
echo "结果2:$l"
结果:
[root@h data]# vi b2.sh
[root@h data]# /bin/sh b2.sh
结果1: 3 15 146
结果2:3
3行(当前文件夹下文件数),15个单词,146个字节,wc -l只输出文件行数
ls |wc 是统计你这个目录下的文件数目。
ls |wc -l是输出第一个结果即3 即文件的数目。
[root@h data]# ls -l | wc -l
9
[root@h data]# ls
a1.sh a2.sh a3.sh a.log a.sh b1.sh b2.sh b.sh
[root@h data]# ll (total 32-----32代表32字节)
total 32
-rw-r--r--. 1 root root 83 Jul 25 19:34 a1.sh
-rw-r--r--. 1 root root 77 Jul 25 19:36 a2.sh
-rw-r--r--. 1 root root 141 Jul 25 19:44 a3.sh
-rwxrwxrwx. 1 root root 23 Jul 27 10:11 a.log
-rwxr-xr-x. 1 root root 98 Jul 25 19:29 a.sh
-rw-r--r--. 1 root root 65 Jul 27 09:58 b1.sh
-rw-r--r--. 1 root root 72 Jul 27 10:03 b2.sh
-rwxr-xr-x. 1 root root 37 Jul 27 09:54 b.sh
(3)转义字符的替换
表达式里含有特殊字符,shell将会进行替换
转义字符 意义
\\ 反斜杠
\a 警报,响铃
\b (BackSpace)删除
\f 换页(FF),下一页
\n 换行
\r 回车
\t (tab)8个字节,一个水平制表符
\v 垂直制表符
-E和不加-e都是禁止对特殊字符进行转义
-n禁止换行,不可以写换行符
-e表对转义字符进行替换。
不加-e:
[root@h data]# ./a.sh
好久不见,hello\n焦美琪
eg:
#!/bin/bash
var="hello"
echo "好久不见,${var}"
echo "焦美琪"
结果:
[root@h data]# ./a.sh
好久不见,hello
焦美琪