当前位置: 首页 > news >正文

【Shell】Shell基础学习

一、shell脚本

(1)第一个shell脚本

#!/bin/bash   
#this is a comment
echo "hello world"

一个shell脚本永远以“#!”开头,这是一个脚本开始的标记,它是告诉系统执行这个文件需要用某个解释器,后面的/bin/bash就是指明解释器的具体位置。

“#”开头是注释

(2)脚本运行方式

①直接bash一个文件指明使用bash shell来解释脚本。

 bash test.sh

②给脚本加执行权限,‘’./ “执行脚本

 chmod +x test.sh./test.sh

如果希望将一个脚本设置成默认系统命令,只需将该脚本复制到系统$PATH变量所在的目录中,同时赋予可执行权限。下次运行直接输入命令即可。

(3)shell内建命令

① 如何确定内建命令:type
type cdtype ifconfig
② 执行程序:. 和source
. ./test.shsource test.sh
③创建命令别名:alias
④ 切换目录:cd
⑤ 声明变量:declare/typeset
#!/bin/bash
#shell是弱类型编程语言,声明变量时并不需要指明类型
declare str="hello world"
echo $str
declare a=1
echo $a
declare pi=3.14
echo $pifun1()
{echo "fun1"
}
fun2()
{echo "fun2"
}#使用-r 声明变量为只读,不允许修改
#使用-a 声明变量
#使用-F 显示脚本定义的函数
#使用-f 显示脚本定义的函数体echo "declare -F"
declare -Fecho "declare -f"
declare -f
⑥ 打印字符:echo

该命令默认最后加上换行符,使用 -n 参数可以不打印换行符

默认情况,禁止解释打印反斜杠转义的字符,若需要打印转义字符,需要使用 -e 参数

⑦ 循环控制:break(跳出循环)/continue (跳过当次循环,进入下一次循环)
⑧ 退出shell:exit
⑨ 整数运算:let
#支持+ - * /(计算结果为整数) % **(次方) 
let a=2+2      #a=4
let b=2**3     #b=8
#支持自增/自减
let i++
let j--
#支持+= -= *= /= %=
let c+=10

二、shell编程基础

1、变量

(1)变量名

shell变量必须以字母或下划线开头,后面可以跟数字、字母、下划线,变量长度没有限制。

变量区分大小写。

(2)变量赋值与取值
① 赋值

【定义变量】 变量名=变量值

【注意点1】变量名和变量值之间用等号相连,之间没有任何空格,等号任何一边出现空格就会出错。

【注意点2】当变量中有空格时必须用引号(可以是双引号或单引号)括起来,否则会出错。
在这里插入图片描述

② 取值

在变量前加 $ ,或使用${}.

【注意点3】如果变量值引用了其他变量,必须使用双引号。因为单引号会阻止shell解释特殊字符$
在这里插入图片描述

(3)取消变量unset

取消变量指将变量从内存中释放,使用命令unset,后面跟变量名。函数也可以被取消,unset后面跟函数名。
在这里插入图片描述

(4)数组

数组的每一项称为一个元素,对于每个元素可以使用索引方式取值。数组并不要求数组的每个元素都是相同类型。随时可以根据需要向数组中增加元素。

declare -a arr   #定义一个数组
arr[0]=1
arr[1]=2
arr[2]='hello world' #特殊shell中允许如此#可以在创建时赋值
declare -a name=('jack' 'bob')#可以给特定的元素赋值
declare -a numbers=([2]=2 [4]=4)#只给2,4索引元素赋值#数组取值${数组名[索引]}
echo ${name[1]}#取数组所有元素
echo ${name[*]}
echo ${name[@]}
#从表面上两者没有区别,但${name[*]}得到的是一个字符串,${name[@]}是以空格隔开的元素值#获取数组元素个数(数组长度)
echo ${#name[*]}
echo ${#name[@]}
#字符串数组也可以获取某个元素的长度
echo ${#name[1]}#数组截取:可以是截取数组的一部分,也可以是截取数组元素的一部分echo ${name[@]:0:2}#截取数组name,0表示从索引0开始,数字2表示取两个元素echo ${name[1]:0:2}#截取元素name[1]#数组连接:将若干数组拼接
conn=(${name[@]} ${name2[@]})#元素替换:将数组元素值替换成其他值
conn=(${conn[@]/jack/hellojack})#取消元素/数组:使用unset将元素释放
unset conn[0]#取消数组索引0元素
unset conn #取消数组conn
(5)只读变量(常量)

这种变量在声明时就要求赋值,并之后无法修改。可以使用readonly内建命令创建,和declare -r 效果声明变量效果一致。

(6)变量的作用域

shell变量的作用域是在本shell内,属于本shell的全局变量,也就是从定义该变量开始到shell结束,或到主动使用unset删除该变量的地方为止。在变量的作用域内,该变量都是可见的,在函数内对变量也是可以访问、修改的

#!/bin/bashdeclare
http://www.lryc.cn/news/249444.html

相关文章:

  • python文件读取
  • 第16关 革新云计算:如何利用弹性容器与托管K8S实现极速服务POD扩缩容
  • 算法通关村第十二关|黄金挑战|最长公共前缀字符串压缩
  • 池式组件 ----- Mysql连接池的原理实现
  • 1.自动化运维工具Ansible的安装
  • [个人笔记] Apache2.4配置TLS1.3安装openssl1.1.1
  • 解密Kafka主题的分区策略:提升实时数据处理的关键
  • GPT5大剧第二季开启,Sam Altman 重掌 OpenAI CEO 大权
  • Selenium 连接到现有的 Google Chrome 示例
  • EI级 | Matlab实现TCN-BiLSTM-Multihead-Attention多头注意力机制多变量时间序列预测
  • 基于安卓的2048益智游戏的设计与实现
  • 解决Linux Visual Studio Code显示字体有问题/Liunx下Visual Studio Code更换字体
  • CityEngine2023 根据shp数据构建三维模型并导入UE5
  • 修复电脑中缺失的VCRUNTIME140.dll文件的5个有效方法
  • 什么是PDN的交流阻抗?
  • FFmpeg之将视频转为16:9(横屏)或9:16(竖屏)(一)
  • Web安全漏洞分析-XSS(上)
  • MVCC多版本并发控制相关面试题整理
  • 02-鸿蒙学习之4.0todoList练习
  • springsecurity5.7.x和springsecurity6.x配置文件对比
  • brat文本标注工具——安装
  • 麒麟操作系统网桥配置
  • 禁奥义·SQL秘籍
  • 浅谈用户体验测试的主要功能
  • 2021年6月3日 Go生态洞察:Fuzzing技术的Beta测试
  • 全新Self-RAG框架亮相,自适应检索增强助力超越ChatGPT与Llama2,提升事实性与引用准确性
  • 句子相似度计算
  • 高级IO select 多路转接实现思路
  • C++学不会?一篇文章带你快速入门
  • 【加密相册】 隐私协议