【Linux】shell 脚本 (.sh) 编写及执行

news/2024/10/22 12:04:38

shell脚本

  shell脚本就是一些命令的集合

#!/bin/bash 
echo "文件开头代表:该文件使用的是bash语法"

 

一、运行.sh文件

方法一:当前文件执行.sh 文件

# 文件必须含有x执行权限 [文件赋x权限:chmod u+x hello.sh]
./test.sh# 文件可以没有x权限
sh test.sh

 

方法二:绝对路径执行.sh 文件

/home/test/test.sh./home/test/test.shsh /home/test.test.sh 

 

查看运行过程

sh -x test.sh

 

  运行预览

  

 

二、脚本编写

 

实例1:输出内容到控制台

# test.sh内容

echo "test shtest"

  运行结果

  

 

实例2:变量格式: “变量名=变量的值”。当在脚本中引用变量时需要加上’$’符号或者“${变量}”

# 变量 var_name ;引用变量 $var_name
var_name="test.sh"echo "test $var_name"

  执行结果  

  

 

实例3: 复制文件

# 变量 `date……` [`非单引号,而是反单引号]
var_name="test.sh"echo "test $var_name"cp /home/appuser/ntest/$var_name /home/appuser/cptest/`date "+%Y-%m-%d-%H:%M:%S"`--$var_name

  执行结果 

  

 

实例4:将执行命令的结果用作变量输出

# 变量
var_name="test.sh"
var_para=$(ls)echo "test输出变量: $var_name"
echo "test输出执行命令的结果变量:${var_para}

   执行结果

   

 

实例5: 用户输入 表示in_name变量的值需要用户通过键盘输入得到

# 写法一:read -p 选项类似echo的作用
read -p "请输入您的名字:" in_name
echo "您输入的名称为:$in_name"# 写法二:会存在换行输入
echo "请输入你的年龄:"
read in_age
echo "您输入的年龄是:$in_age"

 

  运行结果

  

 

 实例6: 当前时间为变量,创建文件

now_date=$(date "+%Y-%m-%d_%H:%M:%S")echo "当前时间:$now_date"# 批量创建文件
touch file{01..03}_$now_date.log
#touch ${now_date}_file{04..07}.log
touchfile.sh

  运行结果

  

以时间命名每隔2s创建1个文件

  运行结果

  

 

  

 实例7计算 数学计算要用’[ ]’括起来并且外头要带一个’$’

# 暂停2s
sleep 2
# 变量
a=1
b=3
# 计算a、b之和
sum=$[$a+$b]
echo "sum is $sum"

   运行结果

  

 

 实例8: 预设变量

# $1的值就是在执行的时候输入的1,而$2的值就是执行的时候输入的$2 $0代表文件名
echo "$0 $1 $2"sum=$[$1+$2]
echo $sum

  运行结果

  

 

 实例9: 逻辑判断 if

语法格式
# 不带else  ((nums<20))是因为.sh中,用一个小括号或者不用都会报错
read -p "请输入数字:" numsif ((nums<20));thenecho "输入不能小于20"
fi# 带else
read -p "请输入数字:" numsif ((nums<20));thenecho "输入不能小于20"
elseecho "恭喜"
fi
elif (())
if else elif []

  运行结果

  

注释: -lt (小于),-gt (大于),-le (小于等于),-ge (大于等于),-eq (等于),-ne (不等于)

 

 实例10:判断文档属性

# 格式为: if [ -e filename ] ; then
# -e :判断文件或目录是否存在
if [ -e touchfile.sh ];thenecho "touchfile.sh 文件存在"
fi#-d :判断是不是目录,并是否存在
if [ -d touchfile.sh ];thenecho "是目录"
elseecho "touchfile.sh 不是目录"
fi#-f :判断是否是普通文件,并存在
if [ -f touchfile.sh ];thenecho "touchfile.sh 是普通文件"
fi#-r :判断文档是否有读权限
if [ -r touchfile.sh ];thenecho "touchfile.sh 有读权限"
fi#-w :判断是否有写权限
if [ -w touchfile.sh ];thenecho "touchfile.sh 有写权限"
fi#-x :判断是否可执行
if [ -x touchfile.sh ];thenecho "touchfile.sh 是可执行文件"
fi

   运行结果

  

 

实例11: 逻辑判断 case; 不限制value的个数(用于编写系统服务的启动脚本)

语法格式
read -p "奇偶判断,请输入一个数值:" numsr=$[$nums%2]case $r in
1)echo "奇数";;
0)echo "偶数";;
esac

  运行结果

  

 

实例12: for 循环

语法格式
# 脚本中的seq 1 5 表示从1到5的一个序列
for i in `seq 1 5`;doecho $i
done

  运行结果

  

  

for i in `ls`; do echo $i; done #for i in `cat test.txt`; do echo $i; done

  运行结果

  

 

 

实例13: while 循环

语法格式
监控脚本
a=7
while [ $a -ge 1];doecho "$a"a=$[$a-2]
done

   运行结果

  

 

 

 实例14: 函数

函数格式
function sun(){sum=$[$1 + $2]echo $sum
}sun $1 $2

  运行结果

  

 

 

 

 

 

 

 


 

拓展

问题1:变量未找到:test.sh: line 2: var_name: command not found

问题原因:等号两遍的变量名和值 之间不能存在空格

 

 

 

 


 

知识点:

 

 

# 查看日历

cal    # 查看当月日历

cal 2022 # 查看年份日历

 

  运行结果

  

   

 

 

# :输出重定向,以覆盖的形式一个文件的内容写入到另一个文件 >>:追加:将文件的内容追加到另一个文件的末尾 语法: ls -l >文件 将列表的内容写入到文件(覆盖原有内容) ls -al >>文件 将列表的内容追加到文件的末尾 cat 文件1 > 文件2 将文件1的内容写入到文件2中(覆盖后者文件的内容) echo "内容" >> 文件 将内容追加到文件中

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

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

相关文章

人工智能编程助手MarsCode注册和安装步骤

人工智能编程助手MarsCode注册和安装步骤 字节最近推出了人工智能编程助手MarsCode,功能非常强大。在IDEA中安装和使用MarsCode的步骤如下: 一、注册MarsCode账号注册地址:https://www.marscode.cn/events/s/iSMPHK8a/ 二、在Idea中安装插件点击菜单“File”——“Settings”…

服务器开启FTP

服务器开启 FTP操作系统:Windows 服务器镜像:Windows Server 2022 数据中心版(简体中文)64 位一、新建用户以及文件夹 步骤 1:新建用户打开计算机管理。打开”系统工具“中的”本地用户和组“,右键选择”新建组“。右键选择”新用户“,设置用户名和密码,并选择”密码永…

库卡机器人维修常见报警代码KSS故障修复

对库卡机器人工作中一些细节和一些安全的措施有所了解才能防患于未然。库卡机器人故障排查可通过观察KUKA机械手报警代码得知,故障代码以及原因有: ——kuka机械臂提示文字KSS 0121:电流过大 原因:每根轴的电流都受到监视并且在电流输出过大时触发放大器内部 的电流保护装置…

第40篇 ConfuserEx混淆代码,防止反编译

要想自己的dll或程序禁止被反编译成功,可以使用ConfuserEx混淆代码 1.正常反编译 1.1 创建一个demo控制台新建Test类,写个fun1.2 正常编译看的效果 目前有很多.NET的反编译工具,例如ILSpy,JustDecompile,dnSpy.下面使用dnSpy对ConsoleApp进行反编译。2.混淆编译dll流程 使…

EasyExcel读取文件数据不能映射到实体的一种情况(对于链式调用实体的数据映射支持)

除去在网上能搜到的由于表头配置不对、单元格格式影响、文件编码以及依赖版本之类的问题以外, 还存在一个可能导致这个问题的原因,也是我现在遇到的,记录一下。 先说结论,EasyExcel不支持映射数据到使用了链式调用的实体类上。 我的情况是在接收Excel数据的实体类上添加了L…

英特尔Optane内存和传统SSD有哪些差异

英特尔Optane内存与传统SSD在多个方面存在显著差异,包括:1.存储技术不同;2.读写速度差异;3.耐用性和可靠性;4.价格和成本效益;5.应用场景和用户需求。Optane内存采用3D XPoint技术,提供比传统SSD更快的读写速度和更高的耐用性。然而,其价格通常高于标准SSD,使其更适合…

ChatGPT国内中文版镜像网站整理合集(2024/10/22)

ChatGPT 镜像站的用途 镜像站(Mirror Site)是指通过复制原始网站内容和结构,创建的备用网站。其主要目的是在原始网站无法访问时,提供相同或类似的服务和信息。​ 一、GPT中文镜像站 ① 镜像站收集开源项目 收集各种可以的ChatGPT镜像网站,免费的收费的。支持4o以及o1,支…

LocalStorage和SessionStorage存储

认识Storage ◼ WebStorage主要提供了一种机制,可以让浏览器提供一种比cookie更直观的key、value存储方式:cookie:服务器返回自动返回一个cooki,浏览器将cookie存储到本地,浏览器再发送请求自动把cooki传递过去localStorage:本地存储,提供的是一种永久性的存储方法,在…