shell(一)

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 bbbccc=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/bashecho "Script name: $0"
echo $0
echo "第1个参数:$1"
echo "第2个参数:$2"
echo "参数个数:$#"
echo "所有参数:$*"
for i in "$*";doecho $i
done
echo "所有参数:$@"
for i in "$@";doecho $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 ];thenecho "变量存在"
elseecho "变量不存在"
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
thenecho "至少有一个文件存在"
elseecho "两个都不存在"
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
EOFecho "$1 内容写入成功"
}read -p "请输入文件夹名称" dir_name
#获取当前路径
path=$(pwd)
if test -e $dir_name; thenecho "$dir_name 文件夹存在 即将进入该文件夹"cd $dir_name read -p "请输入文件名称" file_nameif test -e $file_name; then echo "$file_name文件存在,即将读取文件内容"echo $(cat $file_name)elseecho "$file_name文件不存在 即将创建文件"touch $file_nameecho "$file_name文件创建成功"echo "$(ls)"text='你好好久不见'wirte_text $file_name "$text"fi
elseecho "$dir_name 文件夹不存在 即将创建"mkdir $dir_nameecho "$dir_name 文件创建成功"echo $(ls $path)read -p "请输入文件名称" file_nametouch "$path/$dir_name/$file_name"cd $path/$dir_nameecho $path/$dir_nameecho $(ls "$path/$dir_name")text="你好hi"echo "$text"wirte_text $file_name "$text"fi

在这里插入图片描述

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

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

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

相关文章

idea maven 执行 控制台乱码

这是没加出现的问题 上方案

【HTTP系列】TCP/IP协议

文章目录 一、是什么二、划分五层体系应用层传输层网络层数据链路层物理层 四层体系 三、总结参考文献 一、是什么 TCP/IP&#xff0c;传输控制协议/网际协议&#xff0c;是指能够在多个不同网络间实现信息传输的协议簇 TCP&#xff08;传输控制协议&#xff09; 一种面向连…

【YOLOv5/v7改进系列】替换上采样层为Dysample

一、导言 介绍了一种名为DySample的超轻量级且高效的动态上采样器。DySample旨在解决当前动态上采样技术如CARAFE、FADE和SAPA虽然性能提升显著但带来大量计算负担的问题&#xff0c;这些问题主要来源于动态卷积的时间消耗以及用于生成动态核的额外子网络。此外&#xff0c;FA…

STC90C51驱动LCD1602、LCD12864、OLED

主控芯片&#xff08;STC90C516RDPG5151028&#xff09;介绍 ROM64K,RAM1280字节&#xff0c;40Pin&#xff0c;3个定时器&#xff0c;1个串口&#xff0c;8个中断源&#xff08;分别是&#xff1a;外部中断0(INTO)、外部中断 1(INT1)、外部中断 2(INT2)、外部中断 3(INT3)、定…

系统化自学Python的实用指南

目录 一、理解Python与设定目标 二、搭建学习环境与基础准备 三、入门学习阶段 四、中级进阶阶段 五、项目实践与持续深化 六、持续学习与拓展 一、理解Python与设定目标 Python概述&#xff1a;详细介绍Python的历史沿革、设计理念、主要特点&#xff08;如易读、易维护…

pytest构建和测试FastAPI CURD API

文章目录 概述目标FASTAPI 介绍CRUD API 项目设置freezepipreqs 代码介绍run APIpytest测试F&Q1.执行uvicorn app.main:app --host localhost --port 8000 --reload 报错 zsh: /usr/local/bin/uvicorn: bad interpreter2.生成requirement.txt时&#xff0c;pip3 list pipre…

C语言printf( ) 函数有哪些参数?

一、问题 printf( ) 函数的作⽤是向终端输出若⼲个任意类型的数据&#xff0c;此函数由格式控制部分和输出表列两部分组成&#xff0c;格式控制部分⼜由“&#xff05;”和格式字符串组成&#xff0c;那么&#xff0c;此函数格式字符串部分有哪些参数呢&#xff1f; 二、解答 …

Frida 学习之 messages

目录 一、消息发送 二、环境准备 三、从目标进程中发消息 四、在目标进程中接收消息 五、在目标进程中以阻塞方式接收消息 官方链接&#xff1a;Messages | Frida • A world-class dynamic instrumentation toolkit 参考链接&#xff1a;Frida官方手册 - 消息发送_frida…

Git操作--如何将本地文件夹push到远程新建的仓库中

一、从命令行创建一个新的仓库 1、创建一个说明文件 touch README.md 2、首先使该目录成为git可以管理的目录 git init 3、添加所有文件到本地暂存区 git add . #&#xff08;不要忘了后面的点"."&#xff0c;表示所有文件及目录&#xff09; # git add README…

v-model的工作原理是什么

v-model在Vue.js中是一个非常重要的指令&#xff0c;它实现了表单输入与应用状态&#xff08;data&#xff09;之间的双向绑定。以下是v-model的工作原理&#xff0c;我会尽量以清晰的方式分点表示和归纳&#xff1a; 本质&#xff1a; v-model本质上是一个语法糖&#xff0c…

C语言 RTC时间(年月日时分秒) 和 时间戳 互相转换

一、介绍 在C语言中&#xff0c;将年月日时分秒转换为时间戳&#xff08;Unix时间戳&#xff0c;即从1970年1月1日00:00:00 UTC到现在的秒数&#xff09;通常需要使用struct tm结构体和timegm或mktime函数。&#xff08;注意&#xff0c;mktime函数假设struct tm是本地时间&…

Python语法详解module4(函数)

目录 一、函数基础1. 函数的概念和作用2. 函数的定义和调用3. 参数传递 二、返回值和文档字符串返回值的概念和用法1. 返回值的概念2. 使用 return 关键字返回值&#xff1a;3. 多个返回值的情况&#xff1a; 文档字符串&#xff08;docstring&#xff09;的作用和使用方法1. 文…

力扣1610.可见点的最大数目

力扣1610.可见点的最大数目 把所有极角算出来 atan2(x,y)函数 返回值为弧度(带π) 存入数组并排序 断链成环 再开n个空间 d[ni] d[i] 2*π 在极角数组中找到一段极差<k的最大数目的区间(滑窗) class Solution {vector<double> d;double k;public:int visibleP…

大坝安全监测自动化技术的规范化设计准则

大坝安全监测自动化技术的规范化设计准则 一、施工阶段自动化系统设计要点 在施工阶段&#xff0c;大坝安全监测自动化系统的设计应当涵盖以下几个核心内容&#xff1a; 监测仪器的布局规划及详细的施工图纸设计。 配套土建项目以及防雷设施的施工设计规划。 明确施工过程中的技…

Jenkins工作流程原理

持续集成&#xff1a;自动部署打包发布代码 Jenkins工作流程 项目已经基于Jenkins实现了持续集成&#xff0c;每当我们push代码时&#xff0c;就会触发项目完成自动编译和打包。而需要运行某个微服务时&#xff0c;我们只需要经过两步&#xff1a; 第一步&#xff0c;访问je…

win10下,python3.7安装xlrd和xlwt

win10下&#xff0c;执行import xlwt&#xff0c;结果报错 No module named xlwt。 原因&#xff1a;使用的python没有安装xlwt包。 解决方法&#xff1a; 1&#xff09;打开一个命令窗口&#xff0c;执行&#xff1a;where python&#xff0c;可以看到使用的python路径及版…

2024年SQL Editor趋势

SQL Editor已经超越了仅仅执行查询的传统角色&#xff0c;成为提升生产力、协作和数据管理的综合平台。这一演变反映了QA软件测试人员和开发人员日益增长的需求和复杂需求。让我们深入探讨当前的趋势&#xff0c;强调这些变化如何满足用户的基本需求。 1.增强的协作功能 现代S…

Go 优雅处理goroutines错误

在Go语言中&#xff0c;goroutines是轻量级的线程&#xff0c;它们在后台运行&#xff0c;可以并发执行任务。优雅地处理goroutines中的错误是确保程序稳定性和可维护性的关键。 使用Channel返回错误 Go中goroutines通常通过channel来通信。你可以创建一个额外的channel来发送…

Questflow借助MongoDB Atlas以AI重新定义未来工作方式

MongoDB客户案例导读 Questflow借助MongoDB Atlas赋能AI员工&#xff0c;助力中小型初创企业自动化工作流程&#xff0c;简化数据分析&#xff0c;提升客户体验&#xff0c;推动AI与员工的协作&#xff0c;重新定义未来工作方式。 协作式AI自动化平台 无需编码即可拥有自己的…

动态规划(多重背包问题+二进制优化)

引言 多重背包&#xff0c;相对于01背包来说&#xff0c;多重背包是每个物品会有相应的个数&#xff0c;最多可以选那么多个&#xff0c;因而对于朴素多重背包&#xff0c;需要在01背包的基础上&#xff0c;再加一层物品的循环 朴素多重背包例题 P2347 [NOIP1996 提高组] 砝…