shell脚本

简介: shell脚本

一、什么是shell

shell脚本其实是一类语言而不是一个语言。
常用shell语言:sh、bash、csh、ksh、perl、python等
脚本语言一般在嵌入式中应用,主要是用来做配置
shell脚本的运行机制:解释运行
shell解析器会逐行的解释shell程序代码,然后一行一行的去运行。(顺序结构)

二、运行方法

./xx.sh,chmod a+x xx.sh来添加可执行权限。
source xx.sh,source是linux的一个命令,这个命令就是用来执行脚本程序的。这样运行不需要脚本具有可执行权限。
bash xx.sh,bash是一个脚本程序解释器,本质上是一个可执行程序。这样执行相当于我们执行了bash程序,然后把xx.sh作为argv[1]传给他运行。

三、shell格式

shell程序的第一行一般都是: #!/bin/sh
指定shell程序执行时被哪个解释器解释执行
利用shell输出变量
1.编写.sh文件
2.加运行权限chmod +x xx.sh
3.运行./xx.sh

!/bin/sh

mkdir xiaowei
cd xiaowei
touch demo1.sh

四、变量定义和引用

shell是弱类型语言(语言中的变量如果有明确的类型则属于强类型语言;变量没有明确类型就是弱类型语言)
shell中赋值的=两边是不能有空格的
引用一个变量必须使用$符号,$符号就是变量解引用符号
变量引用的时候可以$var,也可以${var}。这两种的区别是在某些情况下只能用${var}而不能简单的$var

!/bin/sh

a=xiaowei
echo a
echo $a
echo $ayou
echo ${a}you

xw@ubuntu:~/xiaowei$ ./demo1.sh
a
xiaowei

xiaoweiyou

五、shell中无引号、单引号和双引号的区别

shell中使用字符串可以不加双引号,直接使用。而且有空格时也可以,但是缺陷是不能输出"或者其他转义字符
shell中也可以使用单引号来表示字符串,也是直接使用的,不能输出转义字符。
无引号:不能出现任何转义字符
单引号:完全输出
双引号:按照转义字符输出
$表示$的字面值,输出$符号
\`表示`的字面值
\"表示"的字面值
\表示\的字面值

!/bin/sh

echo new string
echo 'new st\"ring'
echo "new st\"ring"
var="$a$"
echo $var
var="$a$"
echo $var

如果不加转义字符,没办法输出$a$

xw@ubuntu:~/xiaowei$ ./1_6.sh
new string
new st\"ring
new st"ring
$a$
$

六、反引号

得到这个命令的返回值

!/bin/sh

MYPATH="pwd/include"
echo "MYPATH = $MYPATH"

xw@ubuntu:~/xiaowei$ ./1_5.sh
MYPATH = /home/xw/xiaowei/include

七、if语句

典型if格式
if [表达式]; then

xxx

else

xxx

fi
典型应用
判断文件是否存在(-f),注意[]里面前后都有空格,不能省略
判断目录是否存在(-d)
判断字符串是否相等("str1" = "str2")
判断数字是否相等(-eq)、大于(-gt)、小于(-lt)、大于等于(-ge)、小于等于(-le)
(eq就是equal,gt就是greater than,lt就是less than,ge就是greater or equal,le就是less or equal)
判断字符串是否为空(-z)
“-o”表示逻辑或
逻辑与&&和逻辑或||与简写的if表达式相结合

!/bin/sh

数字判断

if [ 21 -eq 21 ]; then

    echo "yes"

else

    echo "no"

fi

逻辑或

if [ "st" = "str" -o 21 -gt 10 ]; then

    echo "yes"

else

    echo "no"

fi

|| &&,

str="ss"
[ -z $str ] || echo "fei kong" #str为非空,左边不成立,为0,判断右边,输出
str=""
[ -z $str ] && echo "kong" #str为空,左边成立,为1,判断右边,输出

xw@ubuntu:~/xiaowei$ ./1_7.sh
yes
yes
fei kong
kong

八、for循环

!/bin/sh

for i in 1 2 3 4 5 6

for i in ls
do

    echo $i

done

xw@ubuntu:~/xiaowei$ ./8.sh
1_5.sh
1_6.sh
1_7.sh
8.sh
demo1.sh

九、while循环

!/bin/sh

i=2
j=11
while [ $i -lt $j ] #-lt小于
do

    echo $i
    i=$(($i + 2)) #i++

done

xw@ubuntu:~/xiaowei$ ./9.sh
2
4
6
8
10

十、case语句

shell中的case语句和C语言中的switch case语句作用一样
shell中的case语句,不需要break

!/bin/sh

i=2
case $i in
1) echo "1" ;;
2) echo "2" ;;
esac

xw@ubuntu:~/xiaowei$ ./10.sh
2

十一、echo的创建和追加输入文件

shell中可以直接使用echo指令新建一个文件,并且将一些内容传入这个文件中>
追加符号>> 向一个已经存在的文件末尾追加输入内容

!/bin/sh

echo ls > a.txt #运行ls
echo ./9.sh >> a.txt #运行9.sh

a.txt文件内容

10.sh 11.sh 1_5.sh 1_6.sh 1_7.sh 8.sh 9.sh demo1.sh
2 4 6 8 10

十二、shell程序的传参

C语言中可以通过main函数的argc和argv给程序传参
shell中
$#表示调用该shell时传参的个数。($#计数时只考虑真正的参数个数)
$0、$1、$2·····则依次表示传参的各个参数。
echo $# $0 $1 $2 $3

xw@ubuntu:~/xiaowei$ ./12.sh 1 2 3
3 ./12.sh 1 2 3

十三、while循环和case语言和传参结合

shell中的$# $1等变量的值是可以被改变,被shift指令改变。shift指令有点像左移运算符,把我们给shell程序的传参左移了一个移出去了,原来的$2变成了新的$1,原来的$#少了1个。
break跳出while循环

!/bin/sh

while [ $# -gt 0 ] ; do #大于

    case $# in
    1) echo $# $1 ; shift ; break ;; #break跳出while
    2) echo $# $1 $2 ; shift ;;      #shift指令,左移
    3) echo $# $1 $2 $3 ; shift ;;
    esac

done
echo $# $0 $1 $2 $3

xw@ubuntu:~/xiaowei$ ./13.sh 7 8 9
3 7 8 9
2 8 9
1 9
0 ./13.sh

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