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

简单的示例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命令

1、read命令[交互方式]

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 命令:单步调试显示执行

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

如: 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
时间: 2024-10-10 08:54:05

Shell编程入门(第二版)(上)的相关文章

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

变量測试语句-test 作用:用来測试变量是否相等,是否为空,文件类型等. 格式: test 測试条件 或 [] #范围:整数,字符串.文件 1)整数測试: test int1 -eq int2  測试整数是否相等 test int1 -ge int2  測试int1是否>=int2 test int1 -gt int2  測试int1是否>int2 test int1 -le  int2 測试int1是否<=int2 test int1 -lt int2  測试int1是否<in

Linux下的shell编程入门

通常情况下,我们从命令行输入命令每输入一次就能够得到系统的一次响应.一旦需要我们一个接着一个的输入命令而最后才得到结果的时候,这样的做法显然就没有效率.要达到这样的目的,通常我们利用shell程序或者shell脚本来实现. 一.简介 Shell编程有很多类似C语言和其他程序语言的特征,但是又没有编程语言那样复杂.Shell程序就是放在一个文件中的一系列Linux命令和实用程序,在执行的时候,通过Linux一个接着一个地解释和执行每个命令. 下面我们来看一个简单的shell程序: 1.首先建立一个

Python核心编程(第二版) 第六章习题答案

6–1.字符串.string 模块中是否有一种字符串方法或者函数可以帮我鉴定一下一个字符串是否是另一个大字符串的一部分? 答:有,string.find(str,beg,end) 6–2.字符串标识符.修改例 6-1 的 idcheck.py 脚本,使之可以检测长度为一的标识符,并且可以识别 Python 关键字,对后一个要求,你可以使用 keyword 模块(特别是 keyword.kelist)来帮你. 1 #!/usr/bin/python 2 3 import string 4 impo

shell 编程入门,一些简单符合命令

shell 编程入门 1,,shell 特性 linux预设保存1000条输入过的命令,存于 .bash_history . (1,) !! 表示执行上一条命令 #pwd /root #!! pwd /root (2) !n ,n表示数字,表示执行历史第n条指令,例如!1002 #history |grep 1002 1002 pwd #!1002 pwd /root (3)!字符串,表示执行命令历史中最近一次以 pw 开头的命令 #!pw pwd /root (4)alias 自定义命令的别名

Python核心编程(第二版) 第五章习题答案

5-1.整型.讲讲Python普通整型和长整型的区别. 答:Python 的标准整数类型是最通用的数字类型.在大多数 32 位机器上,标准整数类型的取值范围是-2**31到 2**31-1,也就是-2,147,483,648 到 2,147,483,647.如果在 64 位机器上使用 64 位编译器编译 Python,那么在这个系统上的整数将是 64 位. Python 的长整数类型能表达的数值仅仅与你的机器支持的(虚拟)内存大小有关. 5-2.操作符.(a)写一个函数,计算并返回两个数的乘积.

linux运维、架构之路-shell编程入门

一.shell编程入门必备基础 1.vim编辑器的命令,vimrc设置 2.150个linux基础命令 3.linux中基础的系统服务crond,ssh网络服务,nfs,rsync,inotify,lnmp,sersync,nmap等 二.变量分类 1.全局变量 [[email protected] ~]# env HOSTNAME=nfs-server TERM=linux SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT=172.19.5.146 49184

《Python核心编程》第二版第五章答案

5-1.整型.讲讲Python普通整型和长整型的区别. Python的标准整形类型是最通用的数字类型.在大多数32位机器上,标准整形类型的取值范围是-2**32-2**32 - 1. Python的长整型类型能表达的数值仅仅与你的机器支持的(虚拟)内存大小有关,换句话说,Python能轻松表达很大的整数. 长整型类型是标准整形类型的超集,当程序需要使用比标准整形更大的整型时,可以使用长整型类型,在整型值后面添加L,表示这个为长整型,这两种整形类型正在逐渐统一为 一种. 5-2.操作符.(a)写一

Python核心编程(第二版)勘误

最近在网上买了本Python核心编程(第二版)中文版,刚看了几章,上机练习了几个程序,发现印刷有问题,不知道是什么原因.网上搜索了一番,发现其他网友也有发现类似问题.这里把我遇到的有问题的程序贴出来,以记录自己学习的过程. 第52页程序范例makeTextFile.py #!/usr/bin/python 'makeTextFile.py -- create text file' import os ls = os.linesep # get filename while True:     f

Python核心编程(第二版) 第四章习题答案

4-1.Python对象.与所有Python对象有关的三个属性是什么?请简单的描述一下.答:与所有Python对象有关的三个属性是身份.类型.值.身份:每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数id()来得到.这个值可以被认为是该对象的内存地址.类型:对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么规则.可以用内建函数type()来查看Python的类型.值:对象表示的数据项.4-2.类型.不可更改(immutable)指的是什么?Pyth