程序员人生 网站导航

Shell编程入门(第二版)(上)

栏目:互联网时间:2014-10-10 08:00:01

简单的示例Shell程序

示例1.

#!/bin/bash #This is to show what a shell script looks like echo "Our first example" echo # This inserts an empty line in output. echo "We are currently in the following directory." /bin/pwd echo echo "This directory contains the following files" /bin/ls -l .

示例2.

#!/bin/bash # Auto mail for system info /bin/date +%F >> /tmp/sysinfo echo >> /tmp/sysinfo echo "Disk info:" >> /tmp/sysinfo /bin/df -h >> /tmp/sysinfo echo >> /tmp/sysinfo echo "Online users:" >> /tmp/sysinfo /usr/bin/who | /bin/grep -v root >> /tmp/sysinfo echo >> /tmp/sysinfo echo "Memory info:" >> /tmp/sysinfo /usr/bin/free -m >> /tmp/sysinfo echo >> /tmp/sysinfo # Write to root /usr/bin/write root < /tmp/sysinfo && /bin/rm -f /tmp/sysinfo # crontab -e # 0 9 * * 1-5 ./sysinfo.sh




Shell结构

1#!指定执行脚本的Shell

2#注释行,描述该脚本的作用,负责人等信息

3、命令和控制结构

 

创建shell程序的步骤

第一步:创建一个包含命令和控制结构的文件。 

第二步:修改这个文件的权限使它可以执行: chmod u+x 

第三步:执行 ./example 或 sh example 或 . sysinfo.sh

  

Shell变量

变量:shell传递数据的一种方法,用来代表每个取值的符号名。 

Shell有两类变量:临时变量永久变量。 

临时变量是shell程序内部定义的,其使用范围仅限于定义它的程序,对其它程序不可见。包括:用户自定义变量、位置变量。

永久变量是环境变量,其值不随shell脚本的执行结束而消失。

 

1、用户自定义变量

用户定义的变量由字母或下划线开头,由字母、数字或下划线序列组成,区分大小写。变量名长度没有限制。在使用变量值,要在变量名前加上前缀“$” 

 

2、设置和使用变量

设置变量:习惯上用大写字母来命名变量。变量名只能以字母表中的字符开头,不能用数字。 

变量赋值:=”两边没有空格。 

定义时赋值,NUM=1 

将一个命令的执行结果赋给变量,:TIME=`date`;TIME=$(date +%F)

将一个变量的值赋给另一个变量,:B=120 ; A =$B 

使用echo命令查看变量值。例如:echo $A 

 

3、包含多个字的变量

NAME=Mike Ron #运行时出错,应改为:

NAME=“Mike Ron” 或 $NAME=‘Mike Ron’ 

 

4、单引号与双引号的区别

比如:定义DATE=$(date +%F)

time=”time is $DATE”

echo $time

time='time is $DATE'

echo $time

 

单引号之间的内容原封不动地指定给了变量。 

 

5 set查看系统中定义的所有变量

unset删除所定义的变量

 

6、位置变量

Shell解释执行用户命令时,将命令行的第一个部分作为命令名,其它部分作为参数。由出现在命令行上的位置确定的参数称为位置参数。 

例如

ls -l file1 file2 file3 

$0 这个程序的文件名 ls -l 

$n 这个程序的第n个参数值,n=1~9 

 

7、特殊变量

$* 这个程序的所有参数 

$# 这个程序的参数个数 

$$ 这个程序的PID 

$! 执行上一个后台命令的PID 

$? 执行上一个命令的返回值

 

 

示例-autobak.sh

#!/bin/bash # backup files by date DATE=$(/bin/date +%Y%m%d) /bin/tar -cf /backup/$1.$DATE.tar $1 > /dev/null 2>> /backup/$1.bak.log /bin/gzip /backup/$1.$DATE.tar if [ $? -eq 0 ] then echo "$1 $DATE backup successfully" >> /backup/$1.bak.log else echo "ERROR: failure $1 $DATE backup" >> /bakup/$1.bak.log fi # crontable -e # 0 3 * * 2,5 script

 

示例-special.sh

#!/bin/bash # A test script for special var echo '$# is' $# echo '$* is' $* echo '$0 is' $0 echo '$? is' $? echo '$$ is' $$ echo '$2 is' $2

Shell命令

1read命令[交互方式]

read USERNAME

示例-read.sh

#!/bin/bash # A test script for read read first second third echo "Your first parameter is $first" echo "Your second parameter is $second" echo "Your third parameter is $third"

#sh -x 命令:单步调试显示执行

 

 

2expr命令,对整型变量进行运算

如: expr 3 + 5  #”+”号之间须有空格

expr $var1 - 5 

expr $var1 / $var2 

expr $var3 * 10  #”*”号需要转义符””

 

 

复杂的运算

expr `expr 5 + 7`/$var4

 

将运算结果赋予变量

var4=` expr $var1 / $var2 ` 

 

示例-expr.sh

#!/bin/bash # A test for expr a=10 b=20 c=30 val1=$(expr $a + $b + $c) echo "The value of val1 is $val1" val2=$(expr $c / $b) echo "The value of val2 is $val2" val3=`expr $a * $b` echo "The value of val3 is $val3" val4=`expr $a + $c / $b` echo 'The value of $a + $c / $b is ' $val4


------分隔线----------------------------
------分隔线----------------------------

最新技术推荐