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 <test

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个\来进行表示。

所以我们可以简单的想象成反引号中: \\ = \

  1. $()中则不需要考虑\的问题,与我们平常使用的一样:\ = \

不过一般情况下使用$()。

5.crond定时任务

crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。而linux任务调度的工作主要分为以下两类:

1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存

2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置

时间: 2024-10-13 11:20:35

shell脚本知识的相关文章

自动化运维工程师必备的shell脚本知识

博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持!一.正则表达式: 正则表达式(或称Regular Expression,简称RE)就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式. 该模式描述在查找文字主体时待匹配的一个或多个字符串. 正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配.简单的说,正则表达式就是处理字符串的方法,它是以行为单位来进

shell脚本知识(二)命令字符操作

1.cat 不仅可以读取文件并拼接数据,他还能够从标准输入中进行读取. 用cat将输入文件的内容与标准输入拼接在一起:$ echo 'Text through stdin' | cat - file.txt 压缩空白行: 将文本中多个空白行压缩成单个: cat -s file. 移除空白行:cat  file  | tr  -s '\n' . 将连续多个'\n' 字符压缩成单个'\n' (换行符). 将制表符显示为^| :cat  -T 2.find 查找中匹配多个条件中的一个,可采用OR条件:

shell脚本知识(一) 基本知识预备

1.shell脚本一般以#!开头. 2.printf: printf "%-5s  %-10s  %-4s\n" No Name Mark.%-5s指明一个格式为左对齐且宽度为5的字符串替代(-表示左对齐),如果不用-指定对齐方式,字符串则采用右对齐.宽度指定了保留给某个变量的字符数.对Name而言,保留宽度是10. 3.获得字符串的长度:var=1213434545345     length=$(#var) 可以获得字符串长度,存放在length中. 获得使用哪种shell:ech

shell脚本知识乱集

比如比较字符串.判断文件是否存在及是否可读等,通常用"[]"来表示条件测试. 注意:这里的空格很重要.要确保方括号的空格.笔者就曾因为空格缺少或位置不对,而浪费好多宝贵的时间. if ....; then....elif ....; then....else....fi[ -f "somefile" ] :判断是否是一个文件[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限[ -n "$var" ]

Shell 脚本知识回顾 (三) —— 替换、运算符、字符串、数组

一.Shell替换:Shell变量替换,命令替换,转义字符 如果表达式中包含特殊字符,Shell 将会进行替换.例如,在双引号中使用变量就是一种替换,转义字符也是一种替换. 举个例子: #!/bin/bash a=10 echo -e "Value of a is $a \n" 运行结果: Value of a is 10 这里 -e 表示对转义字符进行替换.如果不使用 -e 选项,将会原样输出: Value of a is 10\n 下面的转义字符都可以用在 echo 中: 转义字符

shell脚本知识(三) 正则表达式 grep sed awk

1.正则表达式 匹配给定文本中的所有单词:( ?[a-zA-Z]+ ?) ?用于匹配单词前后可能出现的空格. 匹配IP地址:[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}   括号分割的4个整数. 2.grep "mach_text"  file1 file2 file3-. 递归搜索文件: grep "text" ./ -Rn 3.cut  将文本按列进切分.可以指定分割每列的定界符.在cut术语中,每列一个字段. c

第16篇 Shell脚本基础(一)

1.什么是shell?shell是一个命令解释器. 是介于操作系统内核与用户之间的一个绝缘层.对于一个linux系统使用人员来说,shell是你驾驭类linux系统最基本的工具.所有的系统命令和工具再加上应用程序,对于shell脚本来说,都是可调用的.shell扮演者操作系统内核和用户的中间人的角色,用户通过键入shell command,然后shell通过解析用户输入,然后将请求转发给操作系统的内核进行处理. 1)一个系统可以存在多个shell,可以通过cat /etc/shells命令查看系

Linux阶段总结shell脚本

shell脚本知识储备汇总 语言类型 强类型:定义变量必须指定类型: 参与的运算必须要符合类型要求(字符串不能和数值相加等): 调用未声明变量会报错 弱类型:定义变量无需指定类型: 默认为字符型参与运算时会自动进行类型转换: 变量无需事先定义也可调用(空) 解释器: shell是解释器bash是可用的具体解释器(shell是车这个概念bash是宝马车) bash  sh ksh(需自己安装) tcsh csh等 bash的基本特性:快捷键:Tab补齐命令和路径:history:命令别名:标准输入

学习 shell脚本之前的基础知识

转载自:http://www.92csz.com/study/linux/12.htm  学习 shell脚本之前的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本的编写是必考的项目.有的单位甚至用shell脚本的编写能力来衡量这个linux系统管理员的经验是否丰富.笔者讲这些的目的只有一个,那就是让你认真对待shell脚本,从一开始就要把基础知识掌握牢固,然后要