Linux shell
1.1 shell变量
为使shell编程更有效,系统提供了一些shell变量。变量可以定制用户本身的工作环境。使用变量可以保存有用信息,使系统获知用户相关设置;变量也用于保存暂时信息。
有两种变量:本地变量和环境变量。
(1)本地变量
本地变量在用户现在的Shell生命期的脚本中使用。
要设置一本地变量,格式为: variable-name = value  or ${variable-name=value}
定义变量:可以使用export 来定义导出一变量,export variable-name=”variable-value”
显示变量:使用echo命令可以显示单个变量值,echo $variable-name
清除变量:使用unset命令清除变量,unset variable-name
显示所有变量:使用set 显示所有本地定义的shell变量;使用env显示所有shell变量。
例子:
$ export MYNAME=”hongdy”
$ echo $MYNAME
hongdy
$ env
$ set
$ unset MYNAME
(2)环境变量
环境变量用于所有用户进程(子进程),登录进程为父进程。Shell中执行的用户进程均为子进程。最好在.profile中定义,系统在/etc/profile文件中已经设置了一些环境变量。
设置环境变量:使用export导出环境变量,export VARIABLE-NAME
显示环境变量:使用echo命令可以显示环境变量,echo $(V ARIABLE-NAME)
清除环境变量:使用unset命令清除环境变量,unset V ARIABLE-NAME
显示所有环境变量:env显示所有环境变量
下面显示的是Shell的一些基本环境变量
变量说明
SHELL 变量保存缺省shell ,在/etc/passwd中设置
TERM 保存终端类型
TZ 时区变量保存时区值
HOME用于保存注册目录的完全路径名
UID当前用户的标识符,取值是由数字构成的字符串
PWD当前工作目录的绝对路径名,该变量的取值随cd命令的使用而变化
PS1主提示符,在root用户缺省的主提示符是“#”,普通用户缺省是“$”
PS2在shell接收用户输入命令的过程中,如果用户在输入行的末尾输入“\”然后回车,或者当用户按回车键时shell判断出用户输入的命令没有结束时,显示这个辅助提示符,提
示用户继续输入命令的其余部分,缺省的辅助提示符是“>”
(3)位置变量
位置参数是一种在调用shell程序的命令行中按照各自的位置决定的变量,是在程序名之后输入的参数。位置参数之间用空格分隔,shell取第一个位置参数替换程序文件中的$1,第二个替换$2,依次类推。$0是一个特殊的变量,它的内容是当前这个shell程序的文件名即脚本名。
每个访问参数前要加&符号,第一个参数为0,表示预留保存实际脚本名字。
比如向脚本传送 I love you
$0            &1            &2            &3
脚本名字      I            love    you
例子:
$ vi findfile
#!/bin/sh
find / -name $1 -print
$ chmod a+x findfile
$ ./findfile /etc/passwd
特定变量参数
参数含义
$#传递到脚本的参数个数
$*所有位置参数的内容
linux查看当前路径命令$$脚本运行的当前进程ID号
$!后台运行的最后一进程的进程ID号
$0当前执行的进程名
$@与$#相同,但在使用时要加引号
$? 命令执行后返回的状态一般为0
1.2 shell输入和输出
在shell脚本中,可以用几种不同的方式读入数据:可以使用标准输入—缺省为键盘,或者指定一个文件作为输入。对于输出也是一样:如果不指定某个文件作为输出,标准输出总是和终端屏幕相关联。
(1)echo
使用echo命令可以显示文本或者把字符串输入到文件。
$ echo string
\c 不换行;\t 跳格;\n 换行;
-n选项禁止echo命令输出后换行,-e使转义符生效。
(2)read
Read语句从键盘或文件的某一行文本中读入信息,并将其付给一个变量,空格作为分隔符。
(3)cat
cat是一个简单而通用的命令,可以用它来显示文件内容,创建文件,还可以用它来显示控制字符。
例子:
$ export NAME=hongdy
$ echo $NAME
hongdy
在使用cat命令时要注意,它不会在文件分页符处停下来;它会一下显示完整个文件。如果希望每次显示一页,可以使用more命令或把cat命令的输出通过管道传递到另外一个具有分页功能的命令中,比如:$ cat myfile | more
如果希望创建一个新文件,并向其中输入内容,cat命令把标准输出重定向到该文件中,标准输入是键盘,输入完毕按ctrl+D结束输入。
cat > myfile
hongdy // 输入的内容,然后回车
ctrl+d // 结束输入返回
(4)pipe
可以通过管道把一个命令的输出传递给另一个命令作为输入,管道用竖杠| 表示。
管道一般形式为:命令1 | 命令2
比如:$ ls | grep *.txt 在ls结果中搜索txt文件
(5)tee
tee命令作用可以用字母T来形象地表示。它把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中。
tee命令的一般形式:tee –a files -a 表示追加到文件末尾
比如:$ ls | tee result 将ls结果显示到标准输出,同时拷贝到文件中。
(6)重定向
标准输入是文件描述符0;标准输出是文件描述符1;标准错误是文件描述符2
$ command 1>filename              // 把标准输出重定向到一个文件中
$ command > filename 2>&1        // 把标准输入和标准错误一起重定向到一个文件中$ command < filename // 命令以filename文件作为标准输入
例子:
$ grep “hello” * > result 2>&1
gerp 的结果将标准错误重定向到标准输出。
1.3 后台执行命令
使某些进程在后台运行,也就是说不在终端屏幕上运行。后台执行命令有以下四种:
命令含义
cron 系统调度进程,使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不同时段运行
at at命令,在一个特定的时间运行一些特殊的作业,或在非负荷高峰时间段或高峰负荷时间段运行
& 使用它在后台运行一个占用时间不长的进程
nohup 使用它在后台运行一个命令,即使在用户退出时也不受影响
(1)cron
cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。由于Cron 是Linux的内置服务,但它不自动启动,可以用以下的方法启动、关闭这个服务:
# /sbin/service crond start //启动服务
# /sbin/service crond stop //关闭服务
# /sbin/service crond restart //重启服务
# /sbin/service crond reload //重新载入配置
也可以将这个服务在系统启动的时候自动启动。
比如:在/etc/rc.d/rc.local这个脚本的末尾加上/sbin/service crond start
crontab命令
crontab命令的一般形式为:crontab [-u user] -e -l –r
-u 用户名;-e 编辑crontab文件;-l 列出crontab文件中的内容;-r 删除crontab文件。
cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:
# crontab -u // 设定某个用户的cron服务,一般root用户在执行此命令的时候需要此参数
# crontab -l // 列出某个用户cron服务的详细内容
# crontab -r // 删除某个用户的cron服务
# crontab -e // 编辑某个用户的cron服务
例子:
root查看自己的cron设置:# crontab -u root -l
root删除hongdy用户的cron设置:# crontab -u hongdy -r
在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root –e ,进入vi编辑模式,编辑的内容一定要符合下面的格式:*/1 * * * * ls >> /
这个格式的前一部分是对时间的设定,后面一部分是要执行的命令,如果要执行的命令太多,可以把这些命令写到一个脚本文件,然后在这里直接调用这个脚本文件,调用的时候写出命令的完整路径。
时间的设定我们有一定的约定,前面五个*号代表五个数字,数字的取值范围和含义如下:分钟(0-59);小時(0-23);日期(1-31);月份(1-12);星期(0-6)//0代表星期天
除了数字还有几个特殊的符号就是"*"、"/"和"-"、",",*代表所有的取值范围内的数字,/代表每的意思,"*/5"表示每5个单位,"-"代表从某个数字到某个数字, ","分开几个离散的数字。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。