shell脚本入门篇

简介:

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 thedustbin
if test $# -eq 0
then
echo “please specify a file”
else
gzip $1
mv $1.gz $HOME/dustbin
echo “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 dustbin
for I in $HOME/dustbin/*.gz
do
rm ?CF $i
echo “$i has been deleted”
done
   while循环

   语法:while表达式

          do   

          操作

          done

   只要while表达式成立,do和done之间的操作就会一直在进行

   until循环

   语法:until 表达式

          do

          操作

          done

   重复do到done之间的操作直到表达式成立。

          

点击(此处)折叠或打开

#test until
#add from 1 to 100
total=0
num=0
until test num –eq 100
do
total=`expr $total + $num`
num=`expr $num + 1`
done
echo “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 in
csj)
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

   重定向:将命令的结果输出到文件,而不是标准输出。

   >:写入文件并覆盖旧文件的内容

   >>:加到文件的末尾,保留旧文件内容。
目录
相关文章
|
24天前
|
弹性计算 Shell Perl
ecs服务器shell常用脚本练习(二)
【4月更文挑战第1天】shell代码训练(二)
106 1
|
27天前
|
Java Shell
SpringBoot启动脚本Shell
SpringBoot启动脚本Shell
17 0
|
4天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
28 3
|
1天前
|
监控 Shell 应用服务中间件
第十二章 Shell脚本编写及常见面试题(二)
第十二章 Shell脚本编写及常见面试题(二)
|
1天前
|
监控 关系型数据库 Shell
第十二章 Shell脚本编写及常见面试题(一)
第十二章 Shell脚本编写及常见面试题(一)
|
1天前
|
监控 Shell
生产环境Shell脚本Ping监控主机是否存活(多种方法)
生产环境Shell脚本Ping监控主机是否存活(多种方法)
|
1天前
|
运维 Shell
Shell脚本判断IP是否合法性(多种方法)
Shell脚本判断IP是否合法性(多种方法)
|
7天前
|
运维 监控 Shell
利用Shell脚本编写局域网监控软件:实时监测主机连接情况
本文介绍了如何使用Shell脚本创建一个局域网监控工具,以实时检查主机连接状态。脚本包括扫描IP地址范围检测主机可达性及使用`netstat`监控ESTABLISHED连接。此外,还展示了如何每60秒将连接数数据自动提交到指定网站API,以便实时跟踪网络活动。这个自动化监控系统有助于提升网络安全性和故障排查效率。
31 0
|
8天前
|
Shell
Shell脚本之流程控制语句
Shell脚本之流程控制语句
|
9天前
|
JSON 运维 监控
训练shell常用脚本练习(三)
【4月更文挑战第14天】shell代码训练(三)
30 1