Linux-4:Shell编程——基础语法(50%-100%)

news2025/1/15 16:57:56

目录

前言

一、数组

1.数组定义

2.关联数组

3.数组长度

二、运算符

1.算术运算符

2.关系运算符

3.布尔运算符

4.逻辑运算符

5.字符串运算符

6.文件测试运算符

三、read命令

1.接收用户输入

2.开启转义

3. -p 输入提示

4. -s 静默模式  -t 设置超时时间

5.读取多个参数

四、格式化字符串

总结


前言

Shell编程——基础语法前半篇:Linux-3:Shell编程——基础语法(0-50%)-CSDN博客

 

一、数组

  • 数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),
  • 初始化时不需要定义数组大小。 与大部分编程语言类似,数组元素的下标由 0 开始。
  • Shell 数组用括号来表示,元素用"空格"符号分割开,

1.数组定义

两种定义方式

#!/bin/sh
# 数组
array=(1 2 A 4)
echo ${array[*]}   # 数组取值 * 取全部 
echo ${array[1]}   # 下标取值 

# 第二种定义方式
array1[0]=h
array1[1]=i
array1[2]=j
array1[3]=k
echo ${array1[@]}   #  @ * 取全部
echo ${array1[1]}
echo ${#array1[@]}
echo ${array1[*]}

输出:@ * 均能取全部的值

1 2 A 4
2
h i j k
i
4
h i j k

 

2.关联数组

  • 嗯!是熟悉的味道
#!/bin/sh

# 关联数组 就是字典
declare -A dict=(["google"]="www.google.com" ["taobao"]="www.taobao.com")
echo ${dict["google"]}

declare -A dict_a
dict_a["sogou"]="www.sogou.com"
dict_a["google"]="www.google.com"
dict_a["taobao"]="www.taobao.com"
echo ${dict_a["sogou"]}

输出:关联数组通过键取值,且键必须唯一

www.google.com
www.sogou.com

 

3.数组长度

#!/bin/sh

declare -A dict=(["google"]="www.google.com" ["taobao"]="www.taobao.com")

declare -A dict_a
dict_a["sogou"]="www.sogou.com"
dict_a["google"]="www.google.com"
dict_a["taobao"]="www.taobao.com"

# 数组长度           #  # 计算总数  @ * 取全部
echo ${#dict[@]}
echo ${#dict_a[*]}

输出注意 !!! # 计算总数       @ * 取全部

2
3

 

二、运算符

1.算术运算符

#!/bin/sh
# 运算符

# 算术运算符
a=`expr 2 + 2 `
echo "两数之和为:$a"
b=`expr 2 - 2`
c=`expr 2 \* 2`      # 乘需要转义\*
d=`expr 2 / 2`
e=`expr 2 % 2`
echo $b $c $d $e


# 第二种表达方式  $((表达式)) 
a1=$((2+2))   
b1=$((2-2))
c1=$((2*2))
d1=$((2/2))
e1=$((2%2))
f1=$(($b1==$e1))
f2=$(($a1>=$b1))
echo $a1 $b1 $c1 $d1 $e1 $f1 $f2

输出:注意第一种表达中乘法需要转义*

两数之和为:4
0 4 1 0
4 0 4 1 0 1 1

 

2.关系运算符

  • eq即equal  ne即not equal   g即great  t即than l即less  

 

举例:

#!/bin/sh

a1=$((2+2))   
b1=$((2-2))

# 关系运算符   -eq == | -ne != | -gt > | -lt < | -ge >= | -le <=
if [ $a1 -eq $b1 ];
then 
    echo "a1==b1"
else
    echo "a1!=b1"
fi

输出:

a1!=b1

 

3.布尔运算符

举例:

#!/bin/sh

# bool运算符 -a -o !  与 或 非
a=10
b=20
if [ $a -gt 11 -o $b -lt 25 ];
then
    echo "a大于11 或 b小于25"
else
    echo "两个都为假"
fi

if [ ! $a -ne 10 ];    
then 
    echo "a等于10"
else
    echo "a不等于10"
fi

输出:

a大于11 或 b小于25
a等于10

 

4.逻辑运算符

举例:

#!/bin/sh

# 逻辑运算符 && ||   与 或   返回布尔值
if [[ $a -gt 5 && $b -lt 21 ]];
then
    echo "both true"
else
    echo "have false"
fi

输出:注意逻辑算符外用的是两个中括号[[ ]]

have false

 

5.字符串运算符

举例:

#!/bin/sh


# 字符串运算符 =  != -n -z(检测是否为0) $(检测是否不为空)
unset cc
if [ -n "$cc" ];      # ""引起来 判断是否有字符
then 
    echo "$cc"
    echo "cc长度不为0"   
else 
    echo "cc长度为0"
fi

输出:判断时需要用引号将变量引起来

cc长度为0

 

6.文件测试运算符

  •  虽然看着唬人 但是我们只需要知道 -d -f -x 的用法即可

举例:

#!/bin/sh


# 文件测试运算符
dirs='/root/shell_code'
if [ -d $dirs ];
then
    echo "${dirs}是一个文件夹"
else
    echo "${dirs}不是一个文件夹"
fi

echo "------------------------------"
files="./demo1.sh"
if [ -f $files  ];
then
    echo "${files}是一个文件"
else 
    echo "${files}不是一个文件"
fi

echo "---------------------------"
if [ -x $files ];
then 
    echo "${files}是一个可执行文件"
else
    echo "${files}不是一个可执行文件"
fi

输出:

/root/shell_code是一个文件夹
------------------------------
./demo1.sh是一个文件
---------------------------
./demo1.sh不是一个可执行文件

 

三、read命令

 

1.接收用户输入

  • 类似于python里的inpu命令
#!/bin/sh

# 接收用户输入 
read name
echo he is $name

输出:程序会获取用户输入的值,将其赋值给变量

hhh
he is hhh

 

2.开启转义

举例:

#!/bin/sh

# 开启转义
echo  -e "ok \n"
echo -e "aaaaa \c "     # \c 不换行
echo "hhhhh"
echo ` ps `

输出:

ok 

aaaaa hhhhh
PID TTY TIME CMD 3450 pts/1 00:00:00 bash 5633 pts/1 00:00:00 sh 5634 pts/1 00:00:00 ps

 

3. -p 输入提示

举例:

# -p 输入提示
read -p "请输入您的年龄"   age
echo "才${age}岁! 您还很年轻呢!"

输出:

请输入您的年龄23
才23岁! 您还很年轻呢!

 

4. -s 静默模式  -t 设置超时时间

#!/bin/sh

# -s 静默模式  -t 设置超时时间
read -p "请输入你的密码:"  -s -t 10 passwd
echo
echo "你的密码是:${passwd}"  

输出:静默模式下 输入的内容不会显示出来  -t 设置超过十秒后自动退出程序

请输入你的密码:
你的密码是:12345

 

5.读取多个参数

  • 读取多个参数 中间用空格隔开

举例:

#!/bin/sh

# 读取多个参数 中间用空格隔开
read -p "请输入多个参数"  name age sex
echo $name $age $sex

# 判断两次输入的密码是否相同
if read -t 20 -sp "请输入密码:" pass1 && echo &&
    read -t 20 -sp "请再次输入密码:" pass2 && echo &&
    [ $pass1 == $pass2 ];
then
    echo "it's ok"
else    
    echo "it's failed"
fi

输出:

请输入多个参数hhhh aaaa
hhhh aaaa
请输入密码:
请再次输入密码:
it's failed

 

四、格式化字符串

  • python有format
  • shell有printf

举例:

#!/bin/sh

# printf 格式化字符串

printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg        # 使用 - 指定宽度
printf "%-10s %-8s %-8.2s\n" 郭靖 男 66.66666
printf "%-10s %-8s %-4.2s\n" zs man 88.8888       # 用英文时宽度是正常的

printf "%d %s\n" 1 "abc" 
printf '%d %s\n' 1 "abc"   # 只有在这里单引号不会将其他符号转换成字符串

printf %s abcdef"\n"
echo
printf %s abc def     # 只指定了一个参数 有两个字符串 %s被重复使用
echo
printf "%s %s %s \n"  a b c d e f h i j k l  # %s %s %s \n 被复用

printf "%s %d %f %c \n"  # %s用空代替 %d %f用0代替

输出:

  • 英文字母通常使用ASCII码或Unicode编码的基本拉丁字母范围,每个字符占据一个固定的字节或字符宽度。例如,ASCII码中的大部分字母字符都是一个字节(8位)。
  • 汉字则通常使用Unicode编码的中文字符集(如UTF-8编码),每个汉字通常占据3个字节(UTF-8编码下的标准长度),有时可能更多。
姓名     性别   体重kg
郭靖     男      66      
zs         man      88  
1 abc
1 abc
abcdef\n
abcdef
a b c 
d e f 
h i j 
k l  
 0 0.000000  

 

总结

这里虽然用了if选择结构,但是很简单易懂,shell的选择和循环下一篇文章会讲。

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

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

相关文章

Spark Steaming有状态转换实验

创建一个streaming目录 mkdir streaming 一、运行网络版的WordCount 1. 连接虚拟机后利用sudo打开hosts后加入红色方框内语句并保存&#xff1a; sudo vim /etc/hosts Netcat是一个用于TCP/UDP连接和监听的Linux工具, 主要用于网络传输及调试领域。先下载&#xff1a; sudo…

简明中医辨证施治小程序

这是一款学习中医辨证施治的好工具&#xff0c;将中医内科、妇科、儿科常见疾病的辨证施治进行整理&#xff0c;各种疾病的辨证分型、症状、治法、方剂选用等均编辑成简明的条目&#xff0c;一目了然&#xff0c;另外内含方剂学及中药学&#xff0c;内容包括常用方剂的出处、组…

GO goroutine状态流转

Gidle -> Grunnable newproc获取新的goroutine&#xff0c;并放置到P运行队列中 这也是go关键字之后实际编译调用的方法 func newproc(fn *funcval) {// 获取当前正在运行中的goroutinegp : getg()// 获取调用者的程序计数器地址&#xff0c;用于调试和跟踪pc : getcallerp…

量化小白也能自动化挖掘出6万+因子

最近逛某乎&#xff0c;碰到了这个问题&#xff1a;如何看待量化交易WorldQuant世坤大赛北大牛人提交了6万因子&#xff1f; 我的第一直觉&#xff0c;这肯定不是纯手工挖出来的&#xff0c;6w个因子&#xff0c;一天挖一个&#xff0c;节假日都不休息的话&#xff0c;需要164年…

轻松入门Linux—CentOS,直接拿捏 —/— <6>vim集合

一、Vim操作详解 1、linux彩蛋 输入命令python会启动Python解释器&#xff0c;允许你输入和执行Python代码。然后&#xff0c;输入import this会导入this模块&#xff0c;它是Python的一种彩蛋&#xff08;Easter egg&#xff09;&#xff0c;然后得到下列结果 选中这段结果复…

Nacos安装教程(全网最靠谱,最简单~)

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集&#xff0c;帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 本文将详细介绍 Nacos 的安装及使用。 官方网址&#xff1a;Nacos官网| Nacos 配置中心 | Nacos 下载| Nacos 官方…

3.7.物体检测算法

物体检测算法 1.R-CNN ​ 首先使用启发式搜索算法来选择锚框&#xff0c;使用预训练模型对每个锚框抽取特征&#xff0c;训练一个SVM来对类别分类&#xff0c;最后训练一个线性回归模型来预测边缘框偏移。 ​ R-CNN比较早&#xff0c;所以使用的是SVM 1.1 兴趣区域(RoI)池化…

【Qwen2微调实战】LLaMA-Factory框架对Qwen2-7B模型的微调实践

系列篇章&#x1f4a5; No.文章1【Qwen部署实战】探索Qwen-7B-Chat&#xff1a;阿里云大型语言模型的对话实践2【Qwen2部署实战】Qwen2初体验&#xff1a;用Transformers打造智能聊天机器人3【Qwen2部署实战】探索Qwen2-7B&#xff1a;通过FastApi框架实现API的部署与调用4【Q…

【数据结构进阶】手撕红黑树

&#x1f525;个人主页&#xff1a; Forcible Bug Maker &#x1f525;专栏&#xff1a; C || 数据结构 目录 &#x1f308;前言&#x1f525;红黑树的概念&#x1f525;手撕红黑树红黑树结点的定义红黑树主体需要实现的成员函数红黑树的插入findEmpty和Size拷贝构造析构函数和…

CANFD报文 位时间 理解

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…

PCB设计——51单片机核心板布线以及原理图

首先是最小系统板&#xff0c;包括晶振电路&#xff0c;电源电路&#xff0c;复位电路 对应pcb板图

HTTP协议:网络通信的基石

一、引言 HTTP&#xff08;HyperText Transfer Protocol&#xff09;&#xff0c;即超文本传输协议&#xff0c;是当今互联网世界中最为重要的协议之一。它是客户端和服务器之间进行通信的规则和标准&#xff0c;使得我们能够在浏览器中浏览网页、下载文件、提交表单等各种操作…

AT32F403A/421 SVPWM驱动无刷电机开环速度测试

AT32F403A/421 SVPWM驱动无刷电机开环速度测试 &#x1f4cc;相关篇《HAL STM32F4 ARM DSP库跑SVPWM开环速度测试》 ✨本测试工程基于上面的运行例程移植而来。主要用来测试驱动无刷电机性能方面的差异。 &#x1f516;工程基于AT32_Work_Bench创建。 &#x1f530;AT32F403A和…

卷积神经网络随记

1.问题描述&#xff1a;一般而言&#xff0c;几个小滤波器卷积层的组合比一个大滤波器卷积层要好&#xff0c;比如层层堆叠了3个3x3的卷积层&#xff0c;中间含有非线性激活层&#xff0c;在这种排列下面&#xff0c;第一个卷积层中每个神经元对输入数据的感受野是3x3&#xff…

Verilog语言和C语言的本质不同点是什么?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「c语言的资料从专业入门到高级教程」&#xff0c;点个关注在评论区回复“666”之后私信回复“666”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 在c语言中&#xff0c;如果你…

7.Redis的Hash类型

Hash类型&#xff0c;也叫散列&#xff0c;其value是一个无序字典&#xff0c;类似于HashMap结构。 问题 String结构是将对象序列化为json字符串后存储&#xff0c;当需要修改对象某个字段是不是很方便。 key value…

【计算机遥感方向】SCI期刊推荐!水刊、顶刊齐聚在此,速投!

本期将为您带来五本计算机SCI 妥妥毕业神刊&#xff01; IEEE TRANSACTIONS ON GEOSCIENCE AND REMOTE SENSING International Journal of Applied Earth Observation and Geoinformation INTERNATIONAL JOURNAL OF REMOTE SENSING Geocarto International RADIO SCIEN…

蔚来智驾的大模型之路:自研芯片 + 世界模型 + 群体智能

作者 |德新 编辑 |王博 7月27日上周末&#xff0c;蔚来举办第二届NIO IN。 李斌说&#xff0c;2023年的第一届NIO IN像是一个大纲&#xff0c;第一次对外完整展示了蔚来布局的12大技术领域。 而这届&#xff0c;更像第一个交付的章节。它重点展示了5项阶段性的进展&#xff…

智能电池管理,soc、soh、comsol锂电池仿真

锂离子电池&#xff0c;作为能源转型与电动车市场崛起的基石&#xff0c;正迎来研发与应用的飞跃。面对繁杂设计参数与实验盲点&#xff0c;电池仿真技术&#xff0c;尤以COMSOL为代表的多物理场仿真&#xff0c;精准解析电池内部机理&#xff0c;从微观行为到宏观性能&#xf…

LoRA:大模型的轻量级高效微调方法

文章目录 1. 模型微调的两种方式2. LoRA 实现 LoRA是一种轻量化且效果非常突出的大模型微调方法&#xff0c;与使用Adam微调的GPT-3 175B相比&#xff0c;LoRA可以将可训练参数的数量减少10000倍&#xff0c;并将GPU内存需求减少3倍。 paper&#xff1a;LoRA: Low-Rank Adapta…