shell(一)

news2024/11/22 22:58:54

shell 既是脚本语言又是应用程序
查看自己linux系统的默认解析:echo $SHELL
在这里插入图片描述创建第一个shell 文件

touch 01.sh

编辑

vi 01.sh

01.sh 文件内容

#!/bin/bash
echo 'felicia'

保存 按Esc 然后输入:wq

定义以开头:#!/bin/bash

#!用来声明脚本由什么shell解释,否则使用默认shell

添加文件可执行权限

chmod +x 01.sh

运行

三种执行方式 (./xxx.sh bash xxx.sh . xxx.sh)

./xxx.sh :先按照 文件中#!指定的解析器解析 指定解析器不存在 使用系统默认解析器

bash xxx.sh:指明先用bash解析器解析 bash不存在 才会使用默认解析器
. xxx.sh 默认解析器解析(不会执行第一行的#!指定的解析器)但是第一行还是要写的

变量

#!/bin/bash
echo 'felicia'
age=18
echo $age
#unset 清除变量
unset age
echo $age

read 接收输入的值

#!/bin/bash
age=18
echo "age=$age"
echo "请输入age的值"
read age
echo "age=$age"

read`命令的选项包括:

-d:指定输入行的结束标志。
-p:在输入前打印提示信息。
-e:允许在输入时使用命令补全功能。
-n:指定输入文本的长度。
-t:指定读取等待时间为指定的秒数。
-r:允许输入包含反斜杠。
-a:把输入行按空格分割并存入数组。
-p “text”:打印提示信息(text),等待输入,并将输入存储在变量中。
-d “:”:用冒号作为输入行的结束标志。

可以通过read --help 查看
read 读取多个数据 read age2 age3

read age2 age3
echo "age2=$age2"
echo "age3=$age3"

只读变量

readonly num=10
echo "num=$num"
num=18
echo "num=$num"

在这里插入图片描述
查看环境变量 env

aaa=19
#将aaa 设为系统变量
export aaa
#查找系统变量
env | grep aaa
#定义并设置系统变量
export bbb=22
env |grep bbb

ccc=23
#查找 用户变量和系统变量
set |grep ccc

echo:显示某个环境变量值
expor:设置一个新的环境变量
env:显示所有环境变量
unset:清除环境变量
set:显示本地定义的shell变量和环境变量

$0 当前执行的Shell脚本的文件名
$1-$9 当前Shell脚本的参数1-9
$# 当前Shell脚本的参数数量
$? 上一次执行的命令的退出状态
$* 所有当前Shell脚本的参数,作为一个单独的字符串
$@ 所有当前Shell脚本的参数,作为多个独立的字符串
$! 上一次在后台运行的任务的进程ID
$$ 当前Shell脚本的进程ID
$- 当前Shell使用的选项(标志)
$IFS Shell脚本中用于指定字段分隔符的值

#!/bin/bash

echo "Script name: $0"
echo $0
echo "第1个参数:$1"
echo "第2个参数:$2"
echo "参数个数:$#"
echo "所有参数:$*"
for i in "$*";do
        echo $i
done
echo "所有参数:$@"
for i in "$@";do
        echo $i
done

在这里插入图片描述
日期

#!/bin/bash
echo "当前日期`date`"
#echo "未来日期:`date -d +1 hour`"
date -d "+1 hour" +"%Y-%m-%d %H:%M:%s"

-e 转义

echo -e "###\n####"

在这里插入图片描述
()由子shell完成 子shell 不会影响当前shell 的值

#!/bin/bash
num=18
(
num=22
echo "()里num=$num"
)
echo “当前num=$num

在这里插入图片描述
()由当前shell完成

#!/bin/bash
num=18
{
num=22
echo "()里num=$num"
}
echo “当前num=$num

在这里插入图片描述
判断变量是否存在

#!/bin/bash
num=100
if [ -v num ];then
        echo "变量存在"
else
        echo "变量不存在"
fi

操作字符串

#!/bin/bash
str="felicia_jammy_lili"
echo "str长度${#str}"
#从下标为4的位置开始提取
echo ${str:4}
#从下标为4的位置提取长度为3字节
echo ${str:4:3}
#替换第一个出现的字符 ${str/旧字符/新字符}
echo ${str/_/:}
#替换所有字符  ${str//旧字符/新字符}
echo ${str//_/:}

在这里插入图片描述
文件测试运算符
-b (file) 检测文件是否是块设备文件,如果是,则返回true,举例:[-b $file]返回false
-c file 检测文件是否是字符设备文件,如果是,则返回true,举例:[-c $file] 返回false
-d file 检测文价是否是目录,如果是,则返回true。举例:[-d $file] 返回false
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回true。举例:[-f $file] 返回true
-g file 检测文件是否设置了SGID位,如果是,则返回true。举例:[-g $file] 返回false
-k file 检测文件是否设置了粘着位(sticky bit),如果是,则返回true。举例:[-k $file] 返回false
-p file 检测文件是否是有名管道,如果是,则返回true。举例:[-p $file] 返回false
-u file 检测文件是否设置了SUID位,如果是,则返回true。举例[-u $file] 返回false
-r file 检测文件是否可读,如果是,则返回true. 举例:[-r $file] 返回true
-w file 检测文件是否可写,如果是,则返回true。举例:[-w $file]
-x file 检测文件是否可执行,如果是,则返回true。举例:[-x $file] 返回true
-s file 检测文件是否为空(文件大小是否大于0),不为空返回true。举例:[-s $file] 返回true
-e file 检测文件(包括目录)是否存在,如果是,则返回true,举例:[-e $file] 返回true

#!/bin/bash
read -p "请输入文件名" file_name
[ -e $file_name ]
echo $?

Shell还提供了与( -a , &&)、或( -o, || )、非( ! )三个逻辑操作符用于将测试条件连接起来,优先级从高到低依次为:”!”,”-a”,”-o”。

test -e是一个Shell内置命令,用于检查文件是否存在。如果文件存在,test -e命令返回0,表示真(true)。如果文件不存在,返回1,表示假(false)。
-e是test命令的一个参数,表示检查文件存在性。
-o是逻辑运算符,表示逻辑“或”。

#!/bin/bash
#检查011.sh文件是否存在,如果不存在,则检查./bash目录是否存在。
if test -e 011.sh -o -e ./bash
then
        echo "至少有一个文件存在"
else
        echo "两个都不存在"
fi

-d file 检查file是否存在 且为目录
-e file 检查file是否存在
-f file 检查file是否存在 且为文件
-r file 检查file是否存在 且可读
-s file 检查file是否存在 且非空
-w file 检查file是否存在 且可写
-x file 检查file是否存在 且可执行
-O file 检查file是否存在 且属当前用户所有
-G file 检查file是否存在 且默认组与当前用户相同
file1 -nt file2 检查file1是否比file2新
file1 -ot file2 检查file1是否比file2旧

if 控制语句
if [条件1]; then
执行第一段程序
elif [条件2];then
执行第二段程序
else
执行第三段程序
fi

#!/bin/bash
function wirte_text(){
        echo "$1 即将写入内容"
       cat>"$1"<< EOF
		$2
EOF
        echo "$1 内容写入成功"
}

read -p "请输入文件夹名称" dir_name
#获取当前路径
path=$(pwd)
if test -e $dir_name; then
	echo "$dir_name 文件夹存在 即将进入该文件夹"
	cd $dir_name 
	read -p "请输入文件名称" file_name
	if test -e $file_name; then 
          echo "$file_name文件存在,即将读取文件内容"
          echo $(cat $file_name)
	else
		echo "$file_name文件不存在 即将创建文件"
		touch $file_name
		echo "$file_name文件创建成功"
		echo "$(ls)"
		text='
			你好
			好久不见
		'
		wirte_text $file_name "$text"
	fi
else
	echo "$dir_name 文件夹不存在 即将创建"
	mkdir $dir_name
	echo "$dir_name 文件创建成功"
	echo $(ls $path)
	read -p "请输入文件名称" file_name
	touch "$path/$dir_name/$file_name"
	cd $path/$dir_name
	echo $path/$dir_name
	echo $(ls "$path/$dir_name")
	text="你好
		hi
		"
	echo "$text"
       wirte_text $file_name "$text"
	
fi


在这里插入图片描述

注意 wirte_text $file_name "$text" 需要用""

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

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

相关文章

如何在路由器上安装代理服务:详细教程

如何在路由器上安装代理服务&#xff1a;详细教程 步骤一&#xff1a;通过漏洞进入路由器系统开启Telnet服务使用Telnet登录路由器系统查看系统信息和CPU信息步骤二&#xff1a;交叉编译MIPS程序 Go对MIPS的支持 安装TFTP Server使用BusyBox tftp传输文件在路由器系统中下载编译…

Linux.小技巧快捷键

1. ctrl c 强制停止 终止某些程序的运行 也可以取消某行命令 2. ctrl d 退出或登出 进入python环境中&#xff0c;使用ctrl d 退出 3.history 查看历史使用了哪些命令 4. ! 历史最近使用的命令的开头 5.使用ctrl r 搜索历史使用的命令 按下 ctrl r 会进入 reverse -…

GIS赋能低空经济:开辟天空新蓝海

在21世纪的科技浪潮中&#xff0c;低空经济作为新兴业态正悄然崛起&#xff0c;成为继陆地、海洋之后的又一战略要地。本文旨在探讨GIS如何赋能低空经济&#xff0c;推动无人机应用、空中交通管理、低空物流、城市空域规划等领域的发展&#xff0c;开启天空经济的新纪元。 GIS…

Xmind Pro 2024 专业版激活码(附下载链接)

说到思维导图&#xff0c;就不能不提 Xmind。这是一款优秀的思维导图工具&#xff0c;拥有着丰富的导图模板&#xff0c;漂亮的界面和配色&#xff0c;以及各种各样的创意工具。 新架构速度更快 采用全新 Snowdancer 引擎&#xff0c;一种堪称「黑科技」的先进图形渲染技术。…

CrawlSpace爬虫部署框架介绍

CrawlSpace爬虫部署框架介绍 全新的爬虫部署框架&#xff0c;为了适应工作的爬虫部署的使用&#xff0c;需要自己开发一个在线编写爬虫及部署爬虫的框架&#xff0c;框架采用的是Django2.2bootstap依赖scrapyd开发的全新通用爬虫在线编辑部署及scrapy项目的部署框架。项目实现的…

VCRUNTIME140_1.dll是什么?VCRUNTIME140_1.dll缺失的7个不同解决方法详解

vcruntime140_1.dll是Microsoft Visual C 2015运行时库的一部分&#xff0c;它为使用Visual C 2015编译的应用程序提供了必要的运行时支持。该文件包含多个关键的运行时组件&#xff0c;包括标准模板库(STL)、C异常处理、内存管理等。 功能: vcruntime140_1.dll确保应用程序能…

在人工智能背景下,程序员要有什么职业素养,怎么改进

文章目录 1. 持续学习和适应能力原因改善方法 2. 跨学科知识原因改善方法 3. 高效的计算资源利用原因改善方法 4. 模型解释性和可控性原因改善方法 5. 数据隐私和安全意识原因改善方法 在AI大模型的背景下&#xff0c;程序员要有什么职业素养&#xff0c;怎么改进&#xff0c;才…

电流继电器JL-31 柜内固定安装 约瑟JOSEF

JL系列电流继电器型号&#xff1a; 电流继电器JL-31 电流继电器JL-31C/1 电流继电器JL-31A 电流继电器JL-31/B 电流继电器JL-32BP 电流继电器JL-22 电流继电器JL-21 电流继电器JL-21B 电流继电器JL-23 电流继电器JL-11 电流继电器JL-11/2G 电流继电器JL-11C 电流继电器J…

5.23.3 乳腺癌成像中的深度学习:十年的进展和未来方向

乳腺影像学在早期诊断和干预以改善乳腺癌患者的预后方面发挥着重要作用。在过去的十年中,深度学习在乳腺癌成像分析方面取得了显着进展,在解释乳腺成像模式的丰富信息和复杂背景方面具有巨大前景。 基于深度学习的乳腺癌成像研究涵盖了对乳房X光检查、超声、磁共振成像和数字…

无人机推流/RTMP视频推拉流EasyDSS无法卸载软件是什么原因?

视频推拉流/直播点播EasyDSS平台支持音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务&#xff0c;在应用场景中可实现视频直播、点播、转码、管理、录像、检索、时移回看等。此外&#xff0c;平台还支持用户自行上传视频文件&#xff0c;也可将上传的点播…

记Codes开源免费研发项目管理平台——流程驱动缺陷管理的创新实现

继上一回合日报与工时融合集中式填报的创新实现后&#xff0c;本篇我们来讲一讲流程驱动缺陷管理的创新实现。 肯定会有人说&#xff0c;不就缺陷管理嘛&#xff01;几个状态完事&#xff0c;爱咋整就咋整&#xff0c;没必要搞流程化&#xff0c;搞流程就是把简单事情复杂化。 …

ViewModel原理分析

认识 ViewModel ViewModel 是一种用来存储和管理UI相关数据的类。 ViewModel 的作用可以从两个方面去理解&#xff1a; UI界面控制器&#xff1a;在最初的MVC模式中&#xff0c;由于 Activity / Fragment 承担的职责过重&#xff0c;因此在后续的 MVP、MVVM 模式中&#xff…

iOS 通过PacketLogger 抓包蓝牙数据包

当使用iOS平台调试蓝牙外设时&#xff0c;需要抓取蓝牙数据包&#xff0c;那么如何获取iOS端设备与蓝牙设备之间通信的蓝牙数据包呢&#xff1f; 一、资料准备 1、苹果手机 2、Xcode开发工具 3、Apple开发者账户 二、环境搭建 2.1、手机环境搭建 手机浏览器访问地址&…

nginx: [error] invalid PID number ““ in “/run/nginx.pid“

两种问题&#xff0c;我自己碰到的情况 ./nginx -s reload执行命令后报错 nginx: [error] invalid PID number ““ in “/run/nginx.pid“ 第一种情况&#xff0c;pid被注释了 /usr/local/nginx/conf/nginx.conf #user nobody; worker_processes 1;// 可能是这里被注释了…

吴恩达2022机器学习专项课程C2W2:2.23 选修_反向传播算法的工作原理(什么是导数图计算大型神经网络)

目录 引言一.导数的计算1.epsilon与导数的关系2.其它导数符号形式3.导数小结 二.小型神经网络的计算图1.什么是计算图&#xff08;前向传播过程&#xff09;2.反向传播计算过程3.验证反向传播的计算结果4.为什么用反向传播计算导数&#xff1f; 三.扩大神经网络的计算图1.计算反…

精准导航:用A*算法优化栅格地图的路径规划【附Matlab代码】

目录 1.算法原理2.代码讲解3.结果展示4.代码获取 1.算法原理 A* 算法是一种基于传统图搜索的智能启发式算法&#xff0c;它具有稳定性高、节点搜索效率高等优点。主要原理为&#xff1a;以起点作为初始节点&#xff0c;搜索初始节点旁 8 个邻域&#xff0c;并通过启发函数评估…

Kubernetes 二进制安装

目录 一、环境介绍 1.1、本节实验环境 1.2、实验拓扑 1.3、实验要求 1.4、实现思路 二、系统环境准备 2.1、主机配置 2.2、安装 Docker 2.3、设置防火墙 2.4、禁用 SELinux 三、生成通信加密证书 3.1、生成 CA 证书 3.2、生成 server 证书 3.3、生成 …

最大的游戏交流社区Steam服务器意外宕机 玩家服务受影响

易采游戏网6月3日消息&#xff1a;众多Steam游戏玩家报告称&#xff0c;他们无法访问Steam平台上的个人资料、好友列表和社区市场等服务。同时&#xff0c;社区的讨论功能也无法正常使用。经过第三方网站SteamDB的确认&#xff0c;&#xff0c;这一现象是由于Steam社区服务器突…

【MySQL03】【 Buffer Pool】

文章目录 一、前言二、缓冲池&#xff08;Buffer Pool &#xff09;1. 缓冲池的概念2. LRU List、Free List 和 Flush List2.1 Free 链表2.1.1 缓冲页的哈希处理 2.2 Flush 链表2.3 LRU 链表2.3.1 简单 LRU 链表2.3.2 优化后的 LRU 列表2.3.3 更进一步的优化 3. 脏页的刷新4. 多…

光猫、路由器的路由模式、桥接模式、拨号上网

下面提到的路由器都是家用路由器 一、联网条件 1.每台电脑、路由器、光猫想要上网&#xff0c;都必须有ip地址。 2.电脑获取ip 可以设置静态ip 或 向DHCP服务器(集成在路由器上) 请求ip 电话线上网时期&#xff0c;猫只负责模拟信号和数字信号的转换&#xff0c;电脑需要使…