[LAMP兄弟连李明老师讲Linux].课件Shell编程
- 首先看一个简单的shell程序
#!/bin/sh
#This is to show what a example 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
shell结构:
1. #!指定执行脚本的shell
2. #注释行
3. 命令和控制结构
创建shell程序的步骤:
第一步:创建一个包含命令和控制结构的文件。
第二步:修改这个文件的权限使它可以执行。
使用chmod u+x
第三步:执行 ./example
(也可以使用“sh example”执行)
- shell变量
变量:是shell传递数据的一种方法,用来代表每个取值的符号名。
Shell有两类变量:临时变量和永久变量。
临时变量是shell程序内部定义的,其使用范围仅限于定义它的程序,对其它程序不可见。包括:用户自定义变量、位置变量。
永久变量是环境变量,其值不随shell脚本的执行结束而消失。
- 用户自定义变量
- 设置和使用变量
变量赋值:赋值号“=”两边应没有空格。
定义时赋值,如NUM=1
将一个命令的执行结果赋给变量,如:TIME=`date`
将一个变量赋给另一个变量,如:A =$B
使用echo命令查看变量值。例如:echo $A
列出所有的变量:
# set
包含多个字的变量:
$NAME=Mike Ron
运行时出错,应改为:$NAME=“Mike Ron” 或 $NAME=‘Mike Ron’
单引号和双引号的区别:
# $ABC=‘$NAME Junior’
# echo $ABC
打印: $NAME Junior
单引号之间的内容原封不动地指定给了变量。
删除变量:
# unset NAME
- 位置变量和特殊变量
例如:
ls -l file1 file2 file3
$0 这个程序的文件名 ls -l
$n 这个程序的第n个参数值,n=1-9
- 特殊变量
$# 这个程序的参数个数
$$ 这个程序的PID
$! 执行上一个后台命令的PID
$? 执行上一个命令的返回值
- shell命令
#! /bin/sh
read first second third
echo "the first parameter is $first"
echo "the second parameter is $second”
echo "the third parameter is $third"
expr $var1 - 5
expr $var1 / $var2
expr $var3 \* 10
expr `expr 5 + 7`/$var4
将运算结果赋予变量:
var4=` expr $var1 / $var2 `
#!/bin/sh
a=10
b=20
c=30
value1=`expr $a + $b + $c`
echo "The value of value1 is $value1"
value2=`expr $c / $b`
echo "The value of value2 is $value2"
value3=`expr $c \* $b`
echo "The value of value3 is $value3"
value4=`expr $a + $c / $b`
echo "The value of value4 is $value4"
- 变量测试语句
test 测试条件
测试范围:整数、字符串、文件
字符串测试:
test str1=str2 测试字符串是否相等
test str1 测试字符串是否不为空
test -n str1 测试字符串是否不为空
test -z str1 测试字符串是否为空
整数测试:
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是否<int2
test int1 -ne int2 测试整数是否不相等
文件测试:
test -d file 指定文件是否目录
test -f file 指定文件是否常规文件
test -x file 指定文件是否可执行
test -r file 指定文件是否可读
test -w file 指定文件是否可写
test -a file 指定文件是否存在
test -s file 文件的大小是否非0
变量测试语句一般不单独使用,一般做为if语句的测试条件,如:
if test -d $1 then
…
fi
变量测试语句可用[]进行简化,如:
test -d $1 等价于 [ -d $1 ]
#!/bin/sh
if [ $# -ne 2 ]; thenecho "Not enough parameters"exit 0
fi
if [ $1 -eq $2 ]; thenecho "$1 equals $2"
elif [ $1 -lt $2 ]; thenecho "$1 littler than $2"
elif [ $1 -gt $2 ]; thenecho "$1 greater than $2"
fi
- 流控制语句
exit语句:退出程序执行,并返回一个返回码,返回码为0表示正常退出,非0表示非正常退出。
例如:exit 0
#!/bin/sh
if [ -x /etc/rc.d/init.d/httpd ]then/etc/rc.d/init.d/httpd restart
fi
if/else语句的流程图
命令1
elif 条件2 then
命令2
else
命令3
fi
-a:逻辑与,仅当两个条件都成立时,结果为真。
-o:逻辑或,两个条件只要有一个成立,结果为真。
echo "please input a file name:"
read file_name
if [ -d $file_name ]thenecho "$file_name is a directory"
elif [ -f $file_name ]thenecho "$file_name is a common file"
elif [ -c $file_name -o -b $file_name ]thenecho "$file_name is a device file“
elseecho "$file_name is an unknown file"
fi
for…done语句
格式:for 变量 in 名字表
do
命令列表
done
#!/bin/sh
for DAY in Sunday Monday Tuesday WednesdayThursday Friday Saturday
doecho "The day is : $DAY"
done
do
command 1
... ...
command n
done
case 变量 in
字符串1) 命令列表1
;;
...
字符串n) 命令列表n
;;
esac
while 条件
do
命令
done
#! /bin/sh
num=1
while [ $num -le 10 ]
doSUM=`expr $num \* $num`echo $SUMnum=`expr $num + 1`
done
until语句,格式:
until 条件
do
命令
done
until类似while循环,不同的是until是条件返回值为假时才继续执行。
break:跳出整个循环
continue:跳过本次循环,进行下次循环
#! /bin/sh
if [ $# -le 0 ]
thenecho "Not enough parameters"exit 0
fi
sum=0
while [ $# -gt 0 ]
dosum=`expr $sum + $1`shift
done
echo $sum
- 函数应用
函数的定义:
函数名 ()
{
命令序列
}
函数的调用:不带()
函数名 参数1 参数2 …
函数中的参数:调用函数时,可以传递参数,在函数中用$1、$2…来引用
- shell 脚本调试
这将执行该脚本并显示所有变量的值。
sh -n script
不执行脚本只是检查语法的模式,将返回所有语法错误。
- awk命令应用
awk -F 域分隔符 ‘命令’
示例:
1、检测系统中UID为0的用户
awk -F: '$3==0 {print $1}' /etc/passwd
2、检测系统中密码为空的用户
awk -F: 'length($2)==0 {print $1}' /etc/shadow
转自:[LAMP兄弟连李明老师讲Linux].课件Shell编程
[LAMP兄弟连李明老师讲Linux].课件Shell编程相关推荐
- 兄弟连沈超linux教程视频,x_13_Linux系统管理-兄弟连-李明-沈超视频教程笔记
新版-兄弟连-李明-沈超老师-linux视频教程笔记 ######################### 1. 进程管理 ######################### ###进程简介 进程是正在 ...
- 2008.12.24李明老师互联网时代的就业与创业讲座总结
2008.12.24唐山培训中心"互联网时代的就业与创业"讲座总结 2008.12.24唐山培训中心"互联网时代的就业与创业"讲座总结 为提高唐山大学生对PHP ...
- 李永乐讲卷积神经网络,李永乐老师讲人工智能
清华大学李永乐老师坐拥千万粉丝,他的课堂有什么魅力? 清华大学李永乐老师拥有上千万的粉丝,这个粉丝拥有量自己觉得很正常,因为每年都有上百万的学子关注这个老师,因为到考研的过程中有一个很大的难题就是数学 ...
- 李明老师关于说话人识别和语种识别的总结
李明老师 个人主页: https://scholars.duke.edu/person/MingLi 李明老师的google scholar 地址: https://scholar.google.co ...
- 运维 - 第一阶段 - linux与shell编程
linux与shell编程 讲师:墨竹 系统运维与linux 1.系统运维是什么 简单来说运维(Operation and maintenance)是指对公司硬件和软件的维护. 硬件包括:机房.机柜. ...
- linux系统——Shell编程之变量解释
linux系统--Shell编程之变量解释 - Shell能做什么 自动化批量系统初始化程序 (update,软件安装,时区设置,安全策略-) 自动化批量软件部署程序 (LAMP,LNMP,Tomca ...
- Linux之shell编程篇-----Shell 函数和Shell 输入/输出重定向
最近发现了一个挺厉害的人工智能学习网站,内容通俗易懂,风趣幽默,感兴趣的可以点击此链接进行查看:床长人工智能教程 废话不多说,请看正文! Shell 函数 1. 自定义函数 linux she ...
- shell for循环1到100_浅谈Linux下shell 编程的for循环常用的6种结构
浅谈Linux下shell 编程的for循环常用的6种结构 1. 常用for循环结构 (1) for 变量 in 值1 值2 值3... do 程序块儿 done (2) for 变量 in `命令` ...
- linux中快捷脚本,Linux下Shell编程快捷键大全(日常整理)
有时候,我们需要在 Bash 中重复执行先前的命令.你当然可以使用上方向键来查看之前曾经运行过的命令.但这里有一些更好的方式,例如,数量掌握以下的快捷键. 1) !!:重复执行上一条指令 2) !a: ...
- Linux _ Shell编程 — 循环语句
Linux _ Shell编程 - 循环语句 一.循环语句for的用法 二.循环语句while的用法 三.循环控制语句 一.循环语句for的用法 for 变量名 in 单词表do命令表done 变量依 ...
最新文章
- Socket基础API介绍
- java wordcount程序_WordCount程序(java)
- POJ 3624 Charm Bracelet
- Redmine for windows 一键安装
- Github | Google开源高性能机器学习研究工具Jax
- Qt中采用多线程实现Socket编程
- kaggle数据集下载
- 网络工程师知识-盘点网工调试工具常用console线汇总
- python中如何判断词性_Python nltk 英文词性分析
- Vue el-menu-item路由跳转
- linux swap空间不足,swap空间不足问题解决
- Windows自动同步网络时间
- 计算机网络,操作系统,微机原理,uml,java都非常重要
- 转:中国移动宽带光猫F663路由模式改桥接模式
- go work 工作区
- 晶体三极管的主要参数
- python抽奖简单小程序游戏_用Python做个年会抽奖小程序吧
- 第23节 三个败家子(23)——天煞孤星说孙权
- react这几年重大意义的变化
- outlook突然变得很慢很卡