本博客内容来自《Linux命令行与shell脚本编程大全》第十一章
目录
1、使用多个命令
最简单的脚本:在命令行界面直接输入多个bash shell命令,用分号隔开
[root@izwz9194nuv8g0cwqfqsh3z ~]# date;who
Sun Mar 3 21:40:11 CST 2019
root pts/0 2019-03-03 20:17 (183.157.160.36)
如上所示,date显示当前日期和时间,who显示是谁登陆到了系统上。
2、创建shell脚本文件
必须在文件第一行指定要使用的shell,其格式为
#!/bin/bash
#后面的一般为注释,shell不处理,但是第一行是例外。惊叹后后面会告诉shell用哪个shell来运行脚本。
在shell脚本中不需要分号隔开命令,回车行即可
#!/bin/bash
# this is an example
date
who
将以上内容保存为名为test的脚本文件,接下来运行脚本,两种途径:
1.将shell脚本文件所处的目录添加到PATH环境变量中;
2.在提示符中用绝对或相对文件路径来引用shell脚本文件。
我们一般采用第二种方式,将脚本文件的确切位置告诉shell,为了引用当前目录下的文件,可以在shell中使用单点操作符:
[root@izwz9194nuv8g0cwqfqsh3z ~]# ./test1
-bash: ./test1: Permission denied
我们没有执行文件的权限,查看文件权限:
[root@izwz9194nuv8g0cwqfqsh3z ~]# ll test1
-rw-r--r-- 1 root root 21 Mar 4 21:40 test1
我们发现文件没有被赋予执行权限,使用chmod命令赋予文件属主执行权限:
[root@izwz9194nuv8g0cwqfqsh3z ~]# chmod u+x test1
[root@izwz9194nuv8g0cwqfqsh3z ~]# ./test1
Mon Mar 4 21:45:45 CST 2019
root pts/0 2019-03-04 21:29 (183.157.160.23)
搞定!
3、显示消息
显示消息一般用echo命令,一般不需要引号就可以显示出文本字符串,如:
[root@izwz9194nuv8g0cwqfqsh3z ~]# echo this is a test
this is a test
但是如果文本字符串中有引号就需要注意,要加引号,如果有单引号就套双引号,有双引号就套单引号:
[root@izwz9194nuv8g0cwqfqsh3z ~]# echo let's see if this'll work
lets see if thisll work
[root@izwz9194nuv8g0cwqfqsh3z ~]# echo "let's see if this'll work"
let's see if this'll work
[root@izwz9194nuv8g0cwqfqsh3z ~]# echo he said "good job"
he said good job
[root@izwz9194nuv8g0cwqfqsh3z ~]# echo 'he said "good job"'
he said "good job"
如果想把文本字符串和命令输出显示在同一行,可以加 -n 参数:
编辑一个名为test1的文件,输入以下内容并保存退出:
#!/bin/bash
echo the time is :
date
echo the user is :
who
执行脚本:
[root@izwz9194nuv8g0cwqfqsh3z ~]# ./test1
the time is :
Wed Mar 6 10:28:57 CST 2019
the user is :
root pts/0 2019-03-06 10:17 (183.157.160.23)
可以看到echo输出与命令输出不在同一行,在脚本中的echo命令后加参数-n:
#!/bin/bash
echo -n the time is :
date
echo -n the user is :
who
执行脚本:
[root@izwz9194nuv8g0cwqfqsh3z ~]# ./test1
the time is :Wed Mar 6 10:31:20 CST 2019
the user is :root pts/0 2019-03-06 10:17 (183.157.160.23)
4、使用变量
环境变量
使用set命令可以显示当前环境变量完整的列表
[root@izwz9194nuv8g0cwqfqsh3z ~]# set
BASH=/bin/bash
......
-gnu")