博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell脚本入门篇
阅读量:6122 次
发布时间:2019-06-21

本文共 3098 字,大约阅读时间需要 10 分钟。

shell脚本入门篇

简介

通常情况下,我们从命令行输入一个命令就能得到系统的响应。但是,当我们要一个接一个的输入命令而只是希望得到最后的结果时,这样做就显得没有效率了。要达到这样的目的,我们利用shell脚本来实现。

shell参数

位置参数

由系统提供的参数称为位置参数。位置参数的值可以用$N得到,N是一个数字,即,如果N=1,那么位置参数为$1,和c语言中的数组比较类似。Linux中,会把输入的命令字符串进行分段并进行编号,从0开始。第0号表示为程序名字,从1开始就是表示传递给程序的参数。例如:$0表示程序的名字,$1表示传递给程序的第一个参数,依次类推。

内置参数

在上一节中说到$0,是一个内置参数,是必须的,而像$1则是可有可无的。和$0一样的内部变量还有一下几个:   $#:传递给程序的参数数量   $?:上一个代码或者shell程序在shell中退出的返回值,如果正常退出则返回0,反之返回非0数。   $*:传递给程序的所有参数组成的字符串。   利用内置参数别写删除一个文件的脚本。   例:

点击(此处)折叠或打开

#name :del#this program to compress a file to thedustbinif test $# -eq 0thenecho “please specify a file”elsegzip $1mv $1.gz $HOME/dustbinecho “file $1 is deleted!”fi
首先在目录下面创建一个空白文件,用于测试。          touch 1   执行脚本程序:sh del.sh 1   程序执行完后,提示文件已经删除。然后再ls一把,查看1文件是否还存在。

变量表达式

上面的程序中,用到了一个关键字test,他是shell程序中的一个表达式比较。通过和shell提供的if等条件语句相结合可以方便的判断。   其用法如下:   test 表达式   表达式所代表的操作符有字符串操作符、数字操作符、逻辑操作符以及文件操作符。

字符串比较

作用:测试字符串是否相等、长度是否为0,字符串是否为NULL(注:bash区分零长度字符串和空字符串)   字符串操作符:   =:比较两个字符串是否相同,相同则为“是”;   !=:比较两个字符串是否相同,不同则为“是”;   -n:比较字符串长度是否大于0,如果大于0则为“是”;   -z:比较字符串长度是否等于0,如果等于则为“是”;   数字比较符:   -eq:相等   -ge:大于等于   -le:小于等于   -ne:不等于   -gt:大于   -lt:小于   逻辑操作:   !:取反,与一个逻辑值相反的逻辑值。   -a:与(and),两个逻辑值为“是”,返回值为“是”,反之为“否”   -o:或(or),两个逻辑值有一个为“是”,返回值就为“是”   文件操作:   文件测试表达式通常是为了测试文件信息,一般由脚本来决定文件爱你是否应用备份、复制和删除。常用的文件操作符有:   -d:对象存在而且是目录返回“是”   -f:对象存在而且是文件返回“是”   -L:对象存在而且为符号连接返回“是”   -r:对象存在而且可读则返回“是”   -s:对象存在而且长度非零则返回“是”   -w:对象存在而且可写则返回值为“是”   -x:对象存在而且可执行则返回“是” 循环结构语句   shell中常见的循环语句有for循环、while循环、until循环。   for循环   语法:for 变量 in 列表          do          操作          done   变量是要在循环列表内部用来指代当前所指代的别表中的那个对象的。   列表是在for循环的内部要操作的对象,可以是字符串也可以是文件,如果是文件,那么列表就是文件名了。   例:删除垃圾信箱中的.gz文件

点击(此处)折叠或打开

# delete all file with extension of “gz” in the dustbinfor I in $HOME/dustbin/*.gzdorm ?CF $iecho “$i has been deleted”done
while循环   语法:while表达式          do             操作          done   只要while表达式成立,do和done之间的操作就会一直在进行   until循环   语法:until 表达式          do          操作          done   重复do到done之间的操作直到表达式成立。

点击(此处)折叠或打开

#test until#add from 1 to 100total=0num=0until test num –eq 100dototal=`expr $total + $num`num=`expr $num + 1`doneecho “the result is $total”
条件语句   shell中的条件语句主要有if语句、case语句   if语句   语法:if 表达式1 then          操作          elif 表达式1 then          操作          elif 表达式3 then          操作          ……..          else          操作          fi   在shell里的if结束标志是将if反过来写成fi;而elif其实就是else if的缩写。   case语句   语法:case 字符串 in          值1|值3)          操作;;          值2|值4)          操作;;          ……          *)          操作;;          ease          case的作用就是当字符串与某个值相同就执行那个值后面的操作。如果同一个操作对应多个值,则使用“|”将各个值分开。   例:

点击(此处)折叠或打开

case $USER incsj)echo “you are csj”;;root)echo “you are root”;echo “welcome!”;;*)echo “who are you? $USER”;;esac
运行这个脚本,程序根据你的登录用户名,打印相关的信息。

补充:1、程序必须是以#!/bin/sh开始,是用来告诉系统后面的参数是用来执行该文的程序。

2、命令   read var:提示用户输入,并将输入值赋给变量。   sort file:对文件中的行进行排序。   expr:进行数学运算。   tee:将数据输出到标准输出设备和文件。   dirname file:返回文件所在的路径。   head file:打印文件的开头几行,默认是10行,通过-n指定行数。   tail file:打印文本文件末尾几行,默认是10行,通过-n指定行数。   管道:将一个命令的结果做另一个命令的输入。          grep “hello” file | wc –l   重定向:将命令的结果输出到文件,而不是标准输出。   >:写入文件并覆盖旧文件的内容   >>:加到文件的末尾,保留旧文件内容。

转载地址:http://onzua.baihongyu.com/

你可能感兴趣的文章
Apache通过mod_php5支持PHP
查看>>
发布一个TCP 吞吐性能测试小工具
查看>>
java学习:jdbc连接示例
查看>>
PHP执行批量mysql语句
查看>>
Extjs4.1.x 框架搭建 采用Application动态按需加载MVC各模块
查看>>
Android开发第一步:了解Android
查看>>
Silverlight 如何手动打包xap
查看>>
建筑电气暖通给排水协作流程
查看>>
JavaScript面向对象编程深入分析(2)
查看>>
linux 编码转换
查看>>
POJ-2287 Tian Ji -- The Horse Racing 贪心规则在动态规划中的应用 Or 纯贪心
查看>>
Windows8/Silverlight/WPF/WP7/HTML5周学习导读(1月7日-1月14日)
查看>>
关于C#导出 文本文件
查看>>
使用native 查询时,对特殊字符的处理。
查看>>
常用排序算法的c++实现(冒泡,选择,插入,堆,shell,快速,归并 )与sort()对比 - coder_xia的专栏 - 博客频道 - CSDN.NET...
查看>>
maclean liu的oracle学习经历--长篇连载
查看>>
ECSHOP调用指定分类的文章列表
查看>>
分享:动态库的链接和链接选项-L,-rpath-link,-rpath
查看>>
基于EPOLL写的HTTP服务器(加入了线程池)_没落都城_新浪博客
查看>>
Office文件的奥秘——.NET平台下不借助Office实现Word、Powerpoint等文件的解析(二)...
查看>>