shell

目录

一.运行方式

二.编程习惯

三.变量

3.1变量的命名

3.3普通变量(局部变量)

3.4特殊变量

3.5变量子串

3.6变量赋值

四.运算方式

4.1$((    ))

4.2let

4.3expr

4.4bc(小数运算)

4.5$[ ]

4.6awk

4.7总结运算方式

五.条件测试语句

5.1文件

5.2条件测试表达式

5.3字符串

六.条件语句

七.循环

7.1while

7.2exit 和continue

7.3for循环

7.3.1带列表的for循环语句

7.3.2不带列表的for循环语句

7.3.3类C风格的for循环语句


一.运行方式

方式一方式二方式三方式四方式五
sh test.shbash test.sh

chmod a+x

./test.sh

. test.shsource test.sh

二.编程习惯

  • 在脚本中尽量不用中文
  • 脚本名见名知意
  • 编写流程控制语句时,先将结构写出来

三.变量

3.1变量的命名

  • 变量不能以数字开始
  • 多个单词通过_连接

3.2环境变量(全局变量)

系统定义的变量,用大写字母表示

PATH:当你输入一个命令时,系统会在PATH中定义的目录中查找该命令的可执行文件
HOME:指定当前用户的主目录路径
USER:当前用户的用户名

查看环境变量:echo $PATH

3.3普通变量(局部变量)

定义示例:变量名=变量值

注意:变量名和值之间没有空格

示例:a="中国"

3.4特殊变量

$0脚本的名称

$n

脚本的第几个参数
$#脚本的参数个数
$*取出所有的参数,添加双引号时,整个整体作为一个参数
$@取出所有的参数,添加双引号时,每个参数作为独立的参数
$?
前一个命令的返回状态码  $?=0 ==>成功执行前一条命令,$?!=0反之
$$
返回本程序的进程 ID PID ),不常用
$!
获取上一个在后台工作的进程的进程号,不常用
$_
保存之前执行的命令的最后一个参数,不常用

注意:当$n中n>=10时,需改成${10},${11}的形式

3.5变量子串

统计字符数方法:

方式一:
[root@serverc ~]# name="mkhfe"
[root@serverc ~]# echo $name
mkhfe
[root@serverc ~]# echo ${#name}
5方式二:
[root@serverc ~]# echo $name | wc -L
5方式三:
[root@serverc ~]# echo $name | awk '{print length()}'
5



子串截取:

方式一:
[root@serverc ~]# text="huekjf jhy"
[root@serverc ~]# echo ${text:5}    #从指定位置截取到末尾
f jhy
[root@serverc ~]# text="huekjf jhy"
[root@serverc ~]# echo ${text:5:3} #从指定位置截取到指定的长度位置
f j方式二:
[root@serverc ~]# echo $text | cut -c 1-4
huek

3.6变量赋值

1.直接赋值
var=a
2.引用其他命令结果赋值
ip=`date'
或
ip=$(date)
3.交互式变量赋值
read -p "a number" number
4.脚本传参赋值
$1 $2 $3

四.运算方式

4.1$((    ))

[root@serverc ~]# c=$((1+2))
[root@serverc ~]# echo $c
3

4.2let

[root@serverc ~]# let c=1+2
[root@serverc ~]# echo $c
3

4.3expr

[root@serverc ~]# expr 1 + 2
3[root@serverc ~]# expr 1 \* 2
2

注意:

  • 乘法运算时需要加转义符,因为*会被识别为通配符
  • 运算的符号两边存在一个空格

4.4bc(小数运算)

[root@serverc ~]# echo 4/3 |bc -l
1.33333333333333333333

4.5$[ ]

[root@serverc ~]# echo $[1+2]
3

4.6awk

[root@serverc ~]# awk 'BEGIN{print 1/3 3/7}'
0.3333330.428571#传参方式
[root@serverc ~]# x=1
[root@serverc ~]# y=2
[root@serverc ~]# awk -vn1=$x -vn2=$y 'BEGIN{print n1+n2}'
3

4.7总结运算方式

bc, awk可用于小数运算,其余方式只能进行整数运算

五.条件测试语句

5.1文件

[root@serverc ~]# [ -d /etc ];echo $?
0[root@serverc ~]# [ -f /etc/hosts ];echo $?
0[root@serverc ~]# [ -e /etc/passwd ];echo $?
0

5.2条件测试表达式

[ "$num" -eq 1 ] && {
echo 1
exit 0
}[ "$num" -eq 2 ] && {
echo 2
exit 0
}

5.3字符串

[ "name"="root" ]||{echo "you are not root"exit 1
}

六.条件语句

case "$1" in[a-z])echo "Lowercase letter.";;[A-Z])echo "Uppercase letter.";;[0-9])echo "Number.";;*)echo "Other type.";;
esac

七.循环

7.1while

7.2exit 和continue

7.3for循环

7.3.1带列表的for循环语句

7.3.2不带列表的for循环语句

7.3.3C风格的for循环语句

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA:git 回滚本地提交-git 选择 Reset Current Branch to

前言 回滚提交到本地但是还没有 Push 上去的提交 选择我们要回滚的节点,然后点击 git 选择 Reset Current Branch to… 再选择 Hard 。当我们点击 Reset 的时候,代码就会回滚到单前选中的这个版本

数字时代的工作利器

当谈到使用工作软件的多样选择时,就像是探索灯塔下的海洋般令人兴奋。无论是新进入办公领域的小白,还是经验丰富的职场老将,我们都渴望找到那些能在工作中为我们点燃生产力和创造力的魔法工具。下面是五款备受欢迎且富有创造力的工作软件推荐…

专业120+总分400+宁波大学912信号与系统考研经验电子信息通信集成电路光电

今年考研顺利上岸,专业课912信号与系统120,总分400,被宁波大学录取,回望这一年的复习有过迷茫和犹豫,也有过坚持和坚强,总结一下自己的复习得失,希望对大家复习有所帮助。专业课: 前…

【重磅发布】已开放!模型师入驻、转格式再升级、3D展示框架全新玩法…

1月23日,老子云正式发布全新版本。此次新版本包含多板块功能上线和升级,为用户带来了含模型师入驻、三维格式在线转换升级、模型免费增值权益开放、全新3D展示框架等一系列精彩内容! 1月23日,老子云正式发布全新版本。此次新版本…

【vue】图片加载骨架

一、前言 在网速较低或者网站的服务器宽带只有几MB的情况下,网页中的图片加载时,要么空白,要么像打印机一样一行一行地“扫描”出来,为了提升用户体验,可以给图片标签外加一层骨架。 无骨架 有骨架 二、详细设计 每张…

现在我有三个代码块,分别都调用了同一个接口使用相同的数据,请问怎么精简代码,让他只调用一次接口,将数据存储起来让其他函数共同使用.

问题描述: 现在我有三个代码块: 一: const getData async () > {console.log(触发了getData接口)let resultData await getActivityInfo(activityId);console.log(resultData,resultData)let id resultData.id;let shareImg resultData.shareImglet shareSubtitle res…

JWT(JSON Web Token)详解以及在go-zero中配置的方法

目的 对用户进行身份认证和信息交换 RFC 7519 传统方式 通过session保存对话信息,服务端返回一个session id,用户保存这个id在cookie内,然后每次请求都传给服务端 局限性 对于服务器集群难以向每个服务器共享同一session jwt的方式是…

备战蓝桥杯---数据结构与STL应用(基础实战篇1)

话不多说,直接上题: 当然我们可以用队列,但是其插入复杂度为N,总的复杂度为n^2,肯定会超时,于是我们可以用链表来写,同时把其存在数组中,这样节点的访问复杂度也为o(1).下面是AC代码: 下面我们来…

学习MySQL仅此一篇就够了(视图)

视图 介绍及基本语法 视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视 图的查询中使用的表,并且是在使用视图时动态生成的。 通俗的讲,视图只保存了查询的SQL逻辑&#xf…

我在代码随想录|写代码Day20之二叉树-700. 二叉搜索树中的搜索,98. 验证二叉搜索树,530.二叉搜索树的最小绝对差

学习目标: 博主介绍: 27dCnc 专题 : 数据结构帮助小白快速入门 👍👍👍👍👍👍👍👍👍👍👍👍 ☆*: .。. o(≧▽≦)…

TypeScript(八) number和string

1. TypeScript number 1.1. 描述 Number对象是原始数值的包装对象。 1.2.语法 var num new Number(value);;注意:如果一个参数值不能转换为一个数字,将返回NaN(非数字值)。 1.3. 对象属性 属性描述MAX_VALUE可表示的最大的数…

深度学习-搭建Colab环境

Google Colab(Colaboratory) 是一个免费的云端环境,旨在帮助开发者和研究人员轻松进行机器学习和数据科学工作。它提供了许多优势,使得编写、执行和共享代码变得更加简单和高效。Colab 在云端提供了预配置的环境,可以直接开始编写代码&#x…