shell脚本知识
1.Shell
成都创新互联服务项目包括东源网站建设、东源网站制作、东源网页制作以及东源网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,东源网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到东源省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
Shell的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式
称为交互式(Interactive),Shell还有一种执行命令的方式称为批处理(Batch),用户事先写一 个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条
一条地敲命令。Shell脚本和编程语言很相似,也有变量和流程控制语句,但Shell脚本是解释
执行的,不需要编译,Shell程序从脚本中一行一行读取并执行这些命令,相当于一个用户把
脚本中的命令一行一 行敲到Shell提示符下执行。
shell脚本是一个文本文件,不能被操作系统识别,但是可以执行,是因为有中间解释器。
运行shell脚本时先加载解释器,解释器读取文本参数进行运行。
shell运行原理:
1.命令中转(创建子进程,分析执行,返回结果)
2.创建进程完成任务
3.父进程不受子进程错误影响
运行过程
test.sh将其内容以命令行参数传递给子bash,子bash再fork孙bash执行命令,将结果返回给子bash。
shell脚本:
1 #!/bin/bash
2
3 echo "hello bit"
在脚本中第一行必须为:告知解释器及版本,#!
运行shell脚本的方法:
1> bash或sh+文件名.sh
2>/bin/bash或sh+文件名.sh
3>chmod u+x test.sh 后直接运行./test.sh
cd与export 是比较特殊的命令,不会创建子进程,直接在当前环境下运行,这类命令被称为内置命令。
举个例子:
1 #!/bin/bash
4 sleep 1
5 pwd
6 sleep 1
7 cd ..
8 sleep 1
9 pwd
10
每隔一秒依次执行命令
结果:
还有一个 .表示当前路径,由当前的bash解释命令。
2.shell变量可以分为环境变量和本地变量
环境变量可以从父进程传给子进程,本地变量只存在于当前shell进程。
printenv显示环境变量,set设置本地变量和环境变量,环境变量是任何进程都有的,而本地变量是shell特有的。
3.eval
eval命令将会首先扫描命令行进行所有的置换,然后再执行该命令。该命令适用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时被称为复杂变量。不过这些变量本身并不复杂。e v a l命令也可以用于回显简单变量,不一定是复杂变量。
例子:
1>显示test.sh内容
从结果看出使用eval命令不但可以置换该变量,还能够执行相应的命令。第一次扫描进行了file变量置换,第二次扫描执行了该字符串中所包含的命令cat test.sh。
2>还可以用来显示出传递给脚本的最后一个参数
在test.sh 脚本中写入 eval echo \$$#, 运行test.sh。结果如下:
3>.给每个值一个变量名
希望一个文件中的第一列成为变量名,第二列成为该变量的值
打开一个test写入
name dandan
age 21
在file.sh中写入
1 #!/bin/bash
2
3 while read NAME VALUE
4 do
5 eval "${NAME}=${VALUE}"
6 done 7 echo "$name $age" 运行file.sh,结果如下: 4>用eval命令创建指向变量的“指针" 4. ``与$()的区别和联系 举一个例子: 1. 1 #!/bin/bash 2 3 echo `echo \$HOSTNAME` 4 echo $(echo \$HOSTNAME) 我们可以使用sh -x test.sh来分析bash是如何来解释这个脚本的,返回的信息如下: 1>反引号中\$并没有将$的特殊意义转换 反引号包含的内容 echo \$hostname 仍然被解释 为一个echo $HOSTNAME 取到了这个变量的值并输出所以反引号返回的值为 localhost 2>$()则正好相反,$明显被\转义成了一个普通字符,所以并没有取到变量值,而是返回了 字符串本身的意思,故而返回了$HOSTNAME。 这说明反引号对反斜杠(\)有特殊的转化,至少我们看到当我们直接用1个\时,它本身 并不会起到转义的作用。 2.再给程序中多加一个\,运行结果: 这次结果与上次运行结果差不多正好相反。 反引号反而输出了$HOSTNAME的字面意思 $()如我们所愿的取到了变量值,并理所应当的输出了一个被转义的字符串\ 3.若将代码改为 echo `echo \\\\` echo $(echo \\\\) 运行结果: 4.若将代码改为 echo `echo \\\\\\\\` echo $(echo \\\\\\\\) 运行结果: 由以上测试得出结论: 反引号其本身就对\进行了转义,保留了其本身意思,如果我们想在反引号中起到\的特殊意义,我们必须使用2个\来进行表示。 所以我们可以简单的想象成反引号中: \\ = \ $()中则不需要考虑\的问题,与我们平常使用的一样:\ = \ 不过一般情况下使用$()。 5.crond定时任务 crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。而linux任务调度的工作主要分为以下两类: 1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存 2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置
新闻标题:shell脚本知识
转载注明:http://myzitong.com/article/godchg.html