Ubuntu运行.sh文件

news2024/12/23 12:17:47

一、运行.sh文件

(1)使用sh testsh执行
(2)使用bash testsh 执行
(3)使用点 执行
(4)使用source执行

./sh 文件开头***的含义:
#!/bin/sh             以下的代码由/bin/sh 来解释
#!/bin/bash           以bash shell来解释
#!/bin/csh            以csh shell来解释
#!/usr/bin/env python  以下代码由python来解释 
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪
一种 Shell

 

(1)使用sh test.sh执行

使用 sh test.sh 来执行script文件,该方法标明使用 sh 这种shell来执行test.sh文件,sh已经是一种被bash替代的shell.

尽管我们在test.sh中声明使用 #!/bin/bash 来执行我们的文件,但此时使用sh而不是bash,则#!/bin/bash 已不起作用。

(2)使用bash test.sh 执行

该方法其实与 sh test.sh 的原理一样,只是使用了 /bin/bash 该种shell来执行我们的脚本文件。

所以,其实使用 dash test.sh' 也是可以的,只是取决于自己想使用那种shell来执行脚本,

但sh、bash、dash三者有些许差别,对于部分关键字如 let,bash支持,而sh和dash并不支持,对于部分关键字则选择使用bash。

(3)使用点 . 执行

该种方式使用之前必须为文件添加执行的权限:

  chmod +x test.sh

添加完执行权限之后,便可以使用 ./test.sh 来执行脚本,该方式与 bash test.sh 是一样的 ,默认使用 bin/bash 来执行我们的脚本。

只有该种执行方式需要对文件添加执行权限,其他方式并不需要。

(4)使用source执行

使用source则也能够直接执行我们的脚本:

  source test.sh

区别

当我们使用 sh test.sh 、bash test.sh 、 ./test.sh 执行脚本的时候,该test.sh运行脚本都会使用一个新的shell环境来执行脚本内的命令,

也就是说,使用这3种方式时,其实script是在子进程的shell内执行,当子进程完成后,子进程内的各项变量和操作将会结束而不会传回到父进程中。

能否理解?看下面例子:

  1. [root@ubuntu] # bash test.sh
  2. Please input your first name: yao <==输入firstname
  3. Please input your last name: pentonBin <==输入lastname
  4. Your full name is: yao pentonBin
  5. [root@ubuntu] # echo $firstname
  6. <==这里没有输出

如果使用source方法来执行脚本呢?

  1. [root@ubuntu] # source test.sh
  2. Please input your first name: yao <==输入firstname
  3. Please input your last name: pentonBin <==输入lastname
  4. Your full name is: yao pentonBin
  5. [root@ubuntu] # echo $firstname
  6. yao <==这里输出firstname

也就是说,source方法执行脚本是在父进程中执行的,test.sh的各项操作都会在原本的shell内生效,

这也是为什么不注销系统而要让某些写入~/.bashrc的设置生效时,需要使用 source ~/.bashrc 而不能使用 bash ~/.bashrc

二、编写.sh文件

(1) 定义变量:变量名不加美元符号。
如:

Num=1
Var2="hello world!"

 注意:变量名和等号之间不能有空格。

(2) 使用变量:使用一个定义过的变量,只要在变量名前面加美元符号即可.
如:

#!/bin/sh
a="hello world!"
num=2
echo "a is : $a num is : ${num}nd"

运行结果:
a is : hello world! num is : 2nd
说明:变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,我们通常加花括号。

(3) 传递参数
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。
n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
值得注意的是,$0 获取到的是脚本路径以及脚本名,后面按顺序获取参数,
当参数超过10个时(包括10 个),需要使用${10},${11}....才能获取到参数,
但是一般很少会超过10 个参数的情况。

建立脚本文件test.sh

#!/bin/bash
echo "脚本$0"
echo "第一个参数$1"
echo "第二个参数$2"

 调用的时候就可以:sh test.sh 2 3,输出如下:
脚本 test.sh
第一个参数2
第二个参数3

(4) echo 命令: echo 用于字符串的输出,常用于观察系统变量的路径。
显示普通字符串:echo "learn linux"
显示系统库路径:echo $PATH PATH 就是一个系统变量,与windonws 下的环境变量相同,存储
默认库的搜索路径

(5) Shell 脚本文件遍历目录
问题:文件夹 /tmp 遍历

#!/bin/bash
for i in /tmp/*
do
  echo "Hello, $i"
done

 

 

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

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

相关文章

Redis 的 Protected Mode 解读

官方配置文件自带的注释&#xff1a; Protected mode is a layer of security protection, in order to avoid that Redis instances left open on the internet are accessed and exploited.When protected mode is on and if:1) The server is not binding explicitly to a …

服务(第十四篇)lvs的高可用负载均衡

Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案&#xff0c;可以解决静态路由出现的单点故障问题。 在一个LVS服务集群中通常有主服务器&#xff08;MASTER&#xff09;和备份服务器&#xff08;BACKUP&#xff09;两种角色的服务器&#xff0c;但是对外表现为一个虚…

Qt连接MySql数据库(本地和远程数据库均可)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 三种方法方法一 略方法二 使用ODBC设置mysql为数据源库1. 添加ODBC数据源&#xff0c;在控制面板中找到管理工具&#xff0c;其中有ODBC数据源 64位的&#xff0c;打…

美颜sdk与人脸识别技术的结合:为智能化时代注入美感

在当今的智能化时代&#xff0c;人脸识别技术已经成为了很多应用的核心。而在这些应用中&#xff0c;美颜功能也逐渐成为了用户所追求的重要特性之一。因此&#xff0c;美颜sdk的出现和发展&#xff0c;为人脸识别技术注入了更多的美感。 一、定义和作用 美颜sdk可以对人脸进…

Django框架之模板基本使用

本篇文章主要讲解Django 3.0框架配置模板路径&#xff0c;并使用视图和模板结合实现一些小功能。 概述 模板是html页面&#xff0c;可以根据视图中传递过来的数据进行填充。 在project中创建templates目录和应用模板目录 如templates/myapp 配置模板路径 修改settings.py文…

四数相加 II

给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < n nums1[i] nums2[j] nums3[k] nums4[l] 0 来源&#xff1a;力扣&#xff08;LeetCode&#xff0…

Java 网络IO编程总结 nio netty原理 bio nio aio io多路复用 事件驱动 信号驱动 汇总总结

目录 ​编辑 io 多路复用 NIO 多线程 和 io多路复用区别 &#xff1a; Netty 操作流程 看了众多精简总结 Netty Bio Nio Aio Io多路复用 事件驱动 信号驱动 io 多路复用 I/O 多路复用模型是利用select、poll、epoll可以同时监察多个流的 I/O 事件的能力&#xff…

【备忘录设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

简介 备忘录模式&#xff08;Memento Pattern&#xff09;是一种结构型设计模式。这种模式就是在不破坏封装的条件下&#xff0c;将一个对象的状态捕捉(Capture)住&#xff0c;并放在外部存储起来&#xff0c;从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录…

接口冒烟测试方法

接口冒烟测试方法 今年遇到了几个问题&#xff0c;与接口的功能和性能相关&#xff0c;恰巧最近公司也在组织以冒烟测试为主题的活动&#xff0c;于是乎突发奇想&#xff0c;寻思着能否将接口测试与冒烟测试结合起来&#xff0c;发掘一些新的接口测试思路与方法。 平时对接口…

SpringBoot创建与运行

文章目录 一、SpringBoot是什么&#xff1f;二、SpringBoot项目创建IDEA创建SpringBoot项目网页版创建SpringBoot项目项目目录介绍输出Hello SpringBoot 一、SpringBoot是什么&#xff1f; 如果我们说Spring的诞生是为了简化Java程序开发的&#xff0c;那么SpringBoot的诞生是为…

【三十天精通Vue 3】 第十八天 Vue 3的国际化详解

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: 三十天精通 Vue 3 文章目录 引言一、Vue 3 国际化概述1.1 国际化的概念1.2 国际化的作用1.3 V…

数据结构(数组、链表、栈、队列、树)

文章目录 1.数组1.1数组的特点1.2自定义数组 2.链表2.1链表的特点2.2自定义链表2.2.1自定义单向链表2.2.2自定义双向链表 3.栈3.1栈的特点3.2 Stack使用举例3.3 自定义栈 4. 队列5. 树与二叉树5.1 树的理解5.2 二叉树的基本概念5.3 二叉树的遍历5.4 经典二叉树和红黑树5.5 二叉…

Jmeter基础之---jmeter基础概念

JMeter 介绍&#xff1a; 一个非常优秀的开源的性能测试工具。 优点&#xff1a;你用着用着就会发现它的重多优点&#xff0c;当然不足点也会呈现出来。 从性能工具的原理划分&#xff1a; Jmeter工具和其他性能工具在原理上完全一致&#xff0c;工具包含4个部分&#xff1a…

GitLab与jekins结合构建持续集成(cl)环境(3)

目录 在jenkins上部署maven 配置maven jenkins回滚 Git方式回滚 通过发布时备份&#xff0c;回滚是选择指定备份文件进行回滚 jenkins添加邮件报警 Jenkins如何远程管理部署节点 Jenkins的远程管理方式&#xff1a; SSH Plugin Publish over SSH jenkins整合Ansible je…

山路转债上市价格预测

山路转债 基本信息 转债名称&#xff1a;山路转债&#xff0c;评级&#xff1a;AA&#xff0c;发行规模&#xff1a;48.36亿元。 正股名称&#xff1a;山东路桥&#xff0c;今日收盘价&#xff1a;7.3元&#xff0c;转股价格&#xff1a;8.17元。 当前转股价值 转债面值 / 转股…

港科夜闻|香港科技大学(广州)与中国电信广东公司签署战略合作协议

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科技大学(广州)与中国电信广东公司签署战略合作协议。根据协议&#xff0c;双方将围绕各自科技创新及发展需要&#xff0c;整合双方的优质资源和优势能力&#xff0c;务实开展多方位的战略合作。本次合作&#xff0c…

ROS学习第四十二节——地图服务

https://download.csdn.net/download/qq_45685327/87721374 上一节我们已经实现通过gmapping的构建地图并在rviz中显示了地图&#xff0c;不过&#xff0c;上一节中地图数据是保存在内存中的&#xff0c;当节点关闭时&#xff0c;数据也会被一并释放&#xff0c;我们需要将栅格…

[译]理解 Rust 中的所有权

本文译者为 360 奇舞团前端开发工程师 原文标题&#xff1a;Understanding ownership in Rust 原文作者&#xff1a;Ukpai Ugochi 原文链接&#xff1a;https://blog.logrocket.com/understanding-ownership-in-rust/ 在 Stack Overflow 进行的开发人员调查中&#xff0c;Rust …

第二十六章 案例TodoList 之实现Footer组件

本小节&#xff0c;我们来实现最后的Footer组件的功能&#xff0c;它的功能主要有&#xff1a; 记录已完成和全部的任务列表数量点击【复选框】可以实现全选和全不选点击【删除已完成】按钮&#xff0c;可以将选中的任务项删除掉 实现已完成和全部的任务列表数量 步骤1&#…

提交Spark应用程序

文章目录 一&#xff0c;提交语法格式二&#xff0c;spark-submit常用参数三&#xff0c;案例演示 - 提交Spark自带的圆周率计算程序&#xff08;一&#xff09;Standalone模式&#xff0c;采用client提交方式&#xff08;二&#xff09;Standalone模式&#xff0c;采用cluster…