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

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

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

   >>:加到文件的末尾,保留旧文件内容。
目录
相关文章
|
1月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
86 1
|
25天前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
48 2
6种方法打造出色的Shell脚本
|
12天前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
33 1
|
17天前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
38 2
|
30天前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
49 6
|
27天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
1月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
70 12
|
1月前
|
存储 运维 监控
自动化运维:使用Shell脚本简化日常任务
【9月更文挑战第35天】在IT运维的日常工作中,重复性的任务往往消耗大量的时间。本文将介绍如何通过编写简单的Shell脚本来自动化这些日常任务,从而提升效率。我们将一起探索Shell脚本的基础语法,并通过实际案例展示如何应用这些知识来创建有用的自动化工具。无论你是新手还是有一定经验的运维人员,这篇文章都会为你提供新的视角和技巧,让你的工作更加轻松。
61 2
|
2月前
|
Shell
shell脚本变量 $name ${name}啥区别
shell脚本变量 $name ${name}啥区别
|
2月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
562 2