Shell脚本快速入门

news2024/9/23 12:24:30

Shell脚本快速入门

  • 1 Hello World
  • 2 Shell 变量
  • 3 Shell 传递参数
  • 4 Shell 基本运算符
  • 5 Shell echo命令
  • 5 Shell printf 命令
  • 6 Shell test 命令
  • 7 Shell 流程控制
  • 8 Shell 函数
  • 9 Shell 输入/输出重定向
  • 10 Shell 文件包含
  • 参考

1 Hello World

编写脚本文件 test.sh

#!/bin/bash
echo "Hello World !"

#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。

chmod +x ./test.sh  #使脚本具有执行权限
./test.sh  #执行脚本

2 Shell 变量

注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。

your_name="runoob.com"

除了显式地直接赋值,还可以用语句给变量赋值,如:

for file in `ls /etc`for file in $(ls /etc)

使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

your_name="qinjx"
echo $your_name
echo ${your_name}

推荐给所有变量加上花括号,这是个好的编程习惯。

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

#!/bin/bash
myUrl="https://www.google.com"
myUrl2="https://www.google.com"
readonly myUrl #将变量定义为只读变量
unset myUrl2 #删除变量,unset 命令不能删除只读变量

运行shell时,会同时存在三种变量:

  1. 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
  2. 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
  3. shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

字符串:

your_name="runoob"
str="Hello, I know you are \"$your_name\"! \n"
echo -e $str

Shell 数组
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似于 C 语言,数组元素的下标由 0 开始编号。

数组名=(值1 值2 ... 值n)
array_name=(value0 value1 value2 value3)
${数组名[下标]} #读取数组
echo ${array_name[@]} #@ 符号可以获取数组中的所有元素

# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}

# 关联数组,Bash 支持关联数组,可以使用任意的字符串、或者整数作为下标来访问数组元素。
declare -A site
site["google"]="www.google.com"
site["runoob"]="www.runoob.com"
site["taobao"]="www.taobao.com"

echo ${site["runoob"]}

3 Shell 传递参数

我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……

#!/bin/bash
echo "Shell 传递参数实例!";
echo "执行的文件名:$0"; # $0 为执行的文件名(包含文件路径)
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
echo "参数个数为:$#"; 
echo "传递的参数作为一个字符串显示:$*";
$ chmod +x test.sh 
$ ./test.sh 1 2 3
Shell 传递参数实例!
执行的文件名:./test.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3
参数个数为:3
传递的参数作为一个字符串显示:1 2 3

4 Shell 基本运算符

原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。

expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

#!/bin/bash

val=`expr 2 + 2` #表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2; 完整的表达式要被 ` ` 包含
echo "两数之和为 : $val"

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5 Shell echo命令

#!/bin/sh
read name  #read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量
echo "$name It is a test"

[root@www ~]# sh test.sh
OK                     #标准输入
OK It is a test        #输出
echo -e "OK! \n" # -e 开启转义
echo "It is a test"
echo -e "OK! \c" # -e 开启转义 \c 不换行
echo "It is a test"

echo "It is a test" > myfile #显示结果定向至文件

echo '$name\"' #原样输出字符串,不进行转义或取变量(用单引号) 输出结果:$name\"

echo `date`  #显示命令执行结果,这里使用的是反引号 `, 而不是单引号 '

5 Shell printf 命令

# 格式
printf  format-string  [arguments...]

printf "%d %s\n" 1 "abc"

%s %c %d %f 都是格式替代符,%s 输出一个字符串,%d 整型输出,%c 输出一个字符,%f 输出实数,以小数形式输出。

6 Shell test 命令

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

num1=100
num2=100
if test $[num1] -eq $[num2]
then
    echo '两个数相等!'
else
    echo '两个数不相等!'
fi

7 Shell 流程控制

sh 的流程控制不可为空

if else

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

#if else 的 [...] 判断语句中大于使用 -gt,小于使用 -lt。
if [ "$a" -gt "$b" ]; then
    ...
fi

# 如果使用 ((...)) 作为判断语句,大于和小于可以直接使用 > 和 <
if (( a > b )); then
    ...
fi

for 循环

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done

while 语句

while condition
do
    command
done

#!/bin/bash
int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done

case … esac

casein
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac

跳出循环
在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell 使用两个命令来实现该功能:break 和 continue

8 Shell 函数

#!/bin/bash
funWithReturn(){
    echo "这个函数会对输入的两个数字进行相加运算..."
    echo "输入第一个数字: "
    read aNum
    echo "输入第二个数字: "
    read anotherNum
    echo "两个数字分别为 $aNum$anotherNum !"
    return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !" #函数返回值在调用该函数后通过 $? 来获得

9 Shell 输入/输出重定向

在这里插入图片描述
默认情况下,command > file 将 stdout 重定向到 file,command < file 将stdin 重定向到 file

如果希望 stderr 重定向到 file,可以这样写:

 command 2>file

如果希望将 stdout 和 stderr 合并后重定向到 file,可以这样写:

command > file 2>&1
# 或者
command >> file 2>&1

#如果希望对 stdin 和 stdout 都重定向,command 命令将 stdin 重定向到 file1,将 stdout 重定向到 file2
command < file1 >file2

#如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:
command > /dev/null

10 Shell 文件包含

#!/bin/bash
#使用 . 号来引用test1.sh 文件
. ./test1.sh

# 或者使用以下包含文件代码
# source ./test1.sh
# url 为test1.sh 中定义的变量
echo "菜鸟教程官网地址:$url"

参考

Shell 教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/505618.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用思科和华为的设备分别完成【单臂路由】的配置

一 什么是单臂路由&#xff1a; 单臂路由&#xff08;router-on-a-stick&#xff09;是指在路由器的一个接口上通过配置子接口&#xff08;或“逻辑接口”&#xff0c;并不存在真正的物理接口&#xff09;的方式&#xff0c;实现原来相互隔离的不同VLAN&#xff08;虚拟…

并发编程06:volatile与JMM

文章目录 6.1 被volatile修饰的变量有两大特点6.2 内存屏障&#xff08;面试重点&#xff09;6.2.1 生活case6.2.2 是什么6.2.3 内存屏障分类6.2.4 困难内容 6.3 volatile特性6.3.1 保证可见性6.3.2 没有原子性6.3.3 指令禁重排 6.4 如何正确使用volatile6.5 本章最后的小总结6…

运算符重载三大补充(前置后置,操作数与参数顺序,指针参数权限),const修饰成员函数,对>> <<的重载与友元函数声明

TIPS 构造函数析构函数拷贝构造函数运算符重载赋值运算符重载当代码当中的运算符连接的全是内置类型的时候&#xff0c;由于内置类型&#xff0c;它是知道该怎么去进行运算的&#xff0c;所以说会直接转化为指令&#xff0c;然后但凡有一个不是内置类型&#xff0c;而是属于自…

JS 实现区块链添加可视化功能

JS 实现区块链添加可视化功能 学习的最后一部分了&#xff0c;完整的资源在这里&#xff1a;https://download.csdn.net/download/weixin_42938619/87765530&#xff0c;有需求的可以自取。 最后一部分是增加一些可视化的功能&#xff0c;完整实现后如下&#xff1a; HTML 部…

基于yolov7开发构建学生课堂行为检测识别系统

yolov7也是一款非常出众的目标检测模型&#xff0c;在我之前的文章中也有非常详细的教程系列的文章&#xff0c;感兴趣的话可以自行移步阅读即可。 《基于YOLOV7的桥梁基建裂缝检测》 《YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程》 《基于YOLOv7融合…

windows 编译 opencv

编译需要的基础工具 #cmake是配置构建工具&#xff0c;mingw是编译工具 cmake CMake是一款跨平台的编译管理工具&#xff0c;可以自动生成各种不同编译环境&#xff08;如Makefile、Visual Studio Solution等&#xff09;&#xff0c;从而实现在不同平台上进行代码编译的目的…

PLC与无线开关量测控终端之间Modbus通信实例

本方案是基于Modbus RTU协议下实现的1主多从自组网无线通信形式&#xff0c;主站为S7-1200 PLC&#xff0c;DTD433H作为从站。DTD433H具备输入和输出开关量信号功能&#xff0c;信号传输方向由用户原系统主从设备所实现的功能决定。方案中采用无线开关量信号测控终端DTD433H与欧…

python调用海康sdk报错问题

sdk参考&#xff1a; (68条消息) Python调用海康威视网络相机_调用海康SDK_python 海康威视_有一点点麻瓜的博客-CSDN博客https://blog.csdn.net/yinweizhehd/article/details/118722052 报错1&#xff1a; 生成解决方案的时候&#xff0c;显示LNK2001&#xff1a;无法解析的…

【AI大模型】SparkDesk讯飞星火认知大模型震撼发布,国产AI技术再创新高!

文章目录 前言SparkDesk讯飞星火认知大模型简介语言理解知识问答逻辑推理数学题解答代码理解与编写亲自体验写在最后 前言 5月6日&#xff0c;讯飞星火认知大模型成果发布会在安徽合肥举行。科大讯飞董事长刘庆峰、研究院院长刘聪发布讯飞星火认知大模型&#xff0c;现场实测大…

C++面向对象编程

面向对象编程 面向对象编程和面向过程编程面向过程面向对象 类型设计类的成员函数对象的创建和使用C对象模型this指针构造函数和析构函数构造函数定义和使用析构函数的定义和使用 对象的生存周期拷贝构造函数深拷贝与浅拷贝 运算符的重载 面向对象编程和面向过程编程 面向过程…

设计模式之【适配器模式】,两个人之间确实需要月老的搭线~

文章目录 一、什么是适配器模式1、适配器模式使用场景2、代理、桥接、装饰器、适配器 4 种设计模式的区别3、适配器模式结构 二、类适配器1、实例 三、对象适配器1、实例 四、接口适配器1、实例 五、源码中的应用 一、什么是适配器模式 适配器模式&#xff08;Adapter Design …

第2天学习Docker——Docker安装

一、前言 Docker 是一个用于开发、传送和运行应用程序的开放平台。Docker 使您能够将应用程序与基础设施分开&#xff0c;以便您可以快速交付软件。使用 Docker&#xff0c;您可以像管理应用程序一样管理基础设施。通过利用 Docker 的快速交付、测试和部署代码的方法&#xff0…

vue3学习一 setup

vue3中没有 data 等配置项&#xff0c; 并且它的引入方式也不是像vue2中的 import vue就可以了&#xff0c; 而是用到什么再引入什么&#xff0c; 其中 setup() 函数&#xff0c; 是最大的区别 vue3中的 setup 有点像vue2中的 data , 但又不完全是 setup 会在 生命周期create…

关于C语言

C99是啥 很多书籍开篇会突然提到C99标准&#xff0c;因此这里搜了一下。 C99是C语言的官方标准第二版。1999年12月1日&#xff0c;国际标准化组织和国际电工委员会旗下的C语言标准委员会正式发布了这个标准文件 &#xff1b; C99是在C89和C90的基础上发展起来的&#xff0c;增加…

独立站平台选哪个好?5个独立站平台优缺点分析

选择适合自己的独立站平台需要综合考虑多个方面的因素&#xff0c;包括平台的优缺点、自己的需求和预算等因素。下面是几个常见的独立站平台的优缺点分析供您参考&#xff1a; 一、Shopify&#xff1a; 优点&#xff1a;简单易用&#xff0c;拥有丰富的主题和应用程序&#xf…

JavaScript实现求1-100之间不能被3整除的数之和,求100以内偶数的和的两个程序代码

以下为实现求1-100之间不能被3整除数之和求100以内偶数的和的两个程序代码和运行截图 目录 前言 一、实现输入两个数比较两个数的大小 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 二、求100以内偶数的和 2.1 运行流程及思想 2.2 代码段 2.3…

泰坦尼克号幸存者预测(案例)----决策树版

1、导入需要的库 import pandas as pd from sklearn.tree import DecisionTreeClassifier import matplotlib.pyplot as plt from sklearn.model_selection import GridSearchCV2、导入数据 在此下载泰坦尼克号训练数据 data pd.read_csv(r"F:\data\train1.csv") …

内网安全:Cobalt Strike 安装.

内网安全&#xff1a;Cobalt Strike 安装. Cobalt Strike是一款渗透测试神器&#xff08;又称为CS&#xff09;。拥有多种协议主机上线方式&#xff0c;集成了端口转发&#xff0c;socket代理&#xff0c;office攻击&#xff0c;文件捆绑&#xff0c;钓鱼&#xff0c;提权&…

哈希算法原理与应用:确保数据完整性和安全性的关键技术

哈希算法是一种将任意长度的消息映射为固定长度摘要或哈希值的算法。哈希算法主要被用于验证数据的完整性和安全性。哈希算法的应用广泛&#xff0c;例如在密码学中用于验证数据完整性和数字签名&#xff0c;也用于检索数据和进行散列分布式存储。下面将详细介绍哈希算法的原理…

《Linux 内核设计与实现》12. 内存管理

文章目录 页区获得页获得填充为 0 的页释放页 kmalloc()gfp_mask 标志kfree()vmalloc() slab 层slab 层的设计slab 分配器的接口 在栈上的静态分配单页内核栈 高端内存的映射永久映射临时映射 每个 CPU 的分配新的每个 CPU 接口 页 struct page 结构表示系统中的物理页&#x…