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
Shell编程入门(第二版)(上)的更多相关文章
- Shell编程入门(第二版)(下)
... ... command n done #select把关键字中的每一项做成类似表单,以交互的方式执行do和done之间的命令 示例-select.sh [python] view plainc ...
- Shell编程入门(第二版)(中)
注:test測试语句一般不单独使用,一般作为if语句的測试条件,如; if test -d file then .... fi test的变量的简写形式"[]" 演示样例-apac ...
- Learning ROS for Robotics Programming - Second Edition(《ROS机器人编程学习-第二版》)
Learning ROS for Robotics Programming - Second Edition <ROS机器人编程学习-第二版> ----Your one-stop guid ...
- 《Python编程第4版 上》高清PDF|百度网盘免费下载|Python基础编程
<Python编程第4版 上>高清PDF|百度网盘免费下载|Python基础编程 提取码:8qbi 当掌握Python的基础知识后,你要如何使用Python?Python编程(第四版)为 ...
- Shell编程入门基础上
前言 为什么学 Shell Shell 脚本语言是实现 Linux/UNIX 系统管理及自动化运维所必备的重要工具, Linux/UNIX 系统的底层及基础应用软件的核心大都涉及 Shell 脚本的内 ...
- Linux Shell编程入门
从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...
- 转:Linux Shell编程入门
http://www.cnblogs.com/suyang/archive/2008/05/18/1201990.html 从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来 ...
- COM编程入门第二部分——深入COM服务器
本文为刚刚接触COM的程序员提供编程指南,解释COM服务器内幕以及如何用C++编写自己的接口.继上一篇COM编程入门之后,本文将讨论有关 COM服务器的内容,解释编写自己的COM接口和COM服务器所需 ...
- 转inux Shell编程入门
http://www.cnblogs.com/suyang/archive/2008/05/18/1201990.html 从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来 ...
随机推荐
- Reset and Clear Recent Items and Frequent Places in Windows 10
https://www.tenforums.com/tutorials/3476-reset-clear-recent-items-frequent-places-windows-10-a.html ...
- DNS通道检测 国外学术界研究情况——研究方法:基于流量,使用机器学习分类算法居多,也有使用聚类算法的;此外使用域名zif low也有
http://www.ijrter.com/papers/volume-2/issue-4/dns-tunneling-detection.pdf <DNS Tunneling Detectio ...
- [SCOI 2003] 字符串折叠
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1090 [算法] 区间DP [代码] #include<bits/stdc++. ...
- php打马赛克
本文实例讲述了php实现图片局部打马赛克的方法.分享给大家供大家参考.具体分析如下: 原理: 对图片中选定区域的每一像素,增加若干宽度及高度,生成矩型.而每一像素的矩型重叠在一起,就形成了马赛克效果. ...
- CTF-Mayday
打开下载的Mayday.txt文件: 温柔 知足突然好想你 拥抱突然好想你 拥抱温柔 知足温柔 知足突然好想你 拥抱突然好想你 拥抱温柔 知足温柔 知足突然好想你 拥抱突然好想你 拥抱温柔 ...
- BZOJ 1061费用流
思路: 我们可以列出几个不等式 用y0带进去变成等式 下-上 可以消好多东西 我们发现 等式左边的加起来=0 可以把每个方程看成一个点 正->负 连边 跑费用流即可 //By SiriusRen ...
- A - I Wanna Be the Guy
Problem description There is a game called "I Wanna Be the Guy", consisting of n levels. L ...
- 使用C#正则表达式获取必应每日图片地址
微软的Bing搜索引擎首页每天都会提供了一些有趣的图片,下面使用正则表达式获取图片的地址,不管是在手机app还是在网站上都是很好的图片素材,而且每天更新,非常不错. 首先访问微软的API,该地址返回的 ...
- [转]C# ListView 单击标题实现排序(在转载的基础上有所完善)
using System; using System.Collections; using System.Windows.Forms; //在转载的基础上有所完善 namespace TDRFacto ...
- python课程设计笔记(四)整数、浮点数与字符串 time库
整数类型(范围无限制) 十进制1 -1 二进制0b1 -0b1 八进制0o1 -0o1 十六进制0x1 -0x1 浮点类型(范围有限制但可忽略) 运算存在不确定尾数 :0.1+0.2!=0.3 原因: ...