shell语法6-exit命令、文件重定向、引入外部脚本
一、exit命令
exit命令用来退出当前shell进程,并返回一个退出状态;使用$?可以接收这个退出状态。
exit命令可以接受一个整数值作为参数,代表退出状态。如果不指定,默认状态值是 0。
exit退出状态只能是一个介于 0~255 之间的整数,其中只有 0 表示成功,其它值都表示失败。
示例:
创建脚本test.sh,内容如下:
#! /bin/bash
if [ $# -ne 1 ] # 如果传入参数个数等于1,则正常退出;否则非正常退出。
then
echo "arguments not valid"
exit 1
else
echo "arguments valid"
exit 0
fi
执行该脚本:
acs@9e0ebfcd82d7:~$ chmod +x test.sh
acs@9e0ebfcd82d7:~$ ./test.sh acwing
arguments valid
acs@9e0ebfcd82d7:~$ echo $? # 传入一个参数,则正常退出,exit code为0
0
acs@9e0ebfcd82d7:~$ ./test.sh
arguments not valid
acs@9e0ebfcd82d7:~$ echo $? # 传入参数个数不是1,则非正常退出,exit code为1
1
二、文件重定向
1、每个进程默认打开3个文件描述符:
stdin标准输入,从命令行读取数据,文件描述符为0
stdout标准输出,向命令行输出数据,文件描述符为1
stderr标准错误输出,向命令行输出数据,文件描述符为2
可以用文件重定向将这三个文件重定向到其他文件中。
2、重定向命令列表
命令 说明
command > file 将stdout重定向到file中
command < file 将stdin重定向到file中
command >> file 将stdout以追加方式重定向到file中
command n> file 将文件描述符n重定向到file中
command n>> file 将文件描述符n以追加方式重定向到file中
3、输入和输出重定向
echo -e "Hello \c" > output.txt # 将stdout重定向到output.txt中
echo "World" >> output.txt # 将字符串追加到output.txt中
read str < output.txt # 从output.txt中读取字符串
echo $str # 输出结果:Hello World
同时重定向stdin和stdout
创建bash脚本:
#! /bin/bash
read a
read b
echo $(expr "$a" + "$b")
创建input.txt,里面的内容为:
3
4
执行命令:
acs@9e0ebfcd82d7:~$ chmod +x test.sh # 添加可执行权限
acs@9e0ebfcd82d7:~$ ./test.sh < input.txt > output.txt # 从input.txt中读取内容,将输出写入output.txt中
acs@9e0ebfcd82d7:~$ cat output.txt # 查看output.txt中的内容
7
三、引入外部脚本
类似于C/C++中的include操作,bash也可以引入其他文件中的代码。
语法格式:
. filename # 注意点和文件名之间有一个空格
或
source filename
示例
创建test1.sh,内容为:
#! /bin/bash
name=yxc # 定义变量name
然后创建test2.sh,内容为:
#! /bin/bash
source test1.sh # 或 . test1.sh
echo My name is: $name # 可以使用test1.sh中的变量
执行命令:
acs@9e0ebfcd82d7:~$ chmod +x test2.sh
acs@9e0ebfcd82d7:~$ ./test2.sh
My name is: yxc
shell语法6-exit命令、文件重定向、引入外部脚本的更多相关文章
- vue文件中引入外部js
1.在项目的入口文件中(app.js)定义remoteScript标签 Vue.component('remote-script', { render: function (createElement ...
- Shell—引入外部脚本文件
在Shell中要如何调用别的shell脚本,或别的脚本中的变量,函数呢? 方式1:. filename 方式2:source filename 需要注意: 两个点之间 ...
- 在Vue文件中引入外部URL链接
前言:最近做一个vueNuxt的项,没有index.html 也没有main.js项目需要引入一些外部的包,没什么技术含量只是一种思路 在vue生命钩子函数中动态创建JavaScript标签追加到HT ...
- Shell 语法之信号与作业
Linux 使用信号与系统上运行的进程进行通信. Linux 编程中最常见的 Linux 系统信号 信号 值 描述 1 SIGHUP 挂起进程 2 SIGINT 中断进程 3 SIGQU ...
- vue页面引入外部js文件遇到的问题
问题一:vue文件中引入外部js文件的方法 //在vue文件中 <script> import * as funApi from '../../../publicJavaScript/pu ...
- Shell命令-文件及目录操作之file、md5sum
文件及目录操作 - file.md5sum 1. file:显示文件的类型 file命令的功能说明 用于辨识文件类型.通过 file 指令,我们得以辨识该文件的类型. file命令的语法格式 file ...
- Shell脚本语法---在Makefile等文件…
1. Shell脚本语法 1.1. 条件测试:test [ 命令test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假,则命令的Exit Sta ...
- shell-常用命令,重定向和文件包含
shell的知识点并不多,这里简单介绍一下常用的一些东西 常用命令 echo 显示普通字符串 echo "test" 显示转义字符 echo "\"test\& ...
- shell 中的>文件重定向符 和 标准输入、输出、错误以及 2&1 的含义*
http://www.cnblogs.com/chenmh/p/5382044.html 问:其中 的2>&1是怎么回事? . test.sh > test.log 2>&a ...
- Shell命令-文件及内容处理之more、less
文件及内容处理 - more.less 1. more:分页显示文件内容 more命令的功能说明 more 命令类似 cat,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白 ...
随机推荐
- 笔记:C#Quart帮助类 定时器 拿来即用
using Quartz.Impl; using Quartz.Impl.Triggers; using System; using System.Collections.Generic; using ...
- 洛谷p2669
#include<bits/stdc++.h> using namespace std; int main() { int k,m=0,p=1;//p:给j个金币的第p天(1~j循环变化) ...
- ECharts 饼图数据放在饼图内部显示
1.业务需求 将数据显示在饼图内部,格式化百分比显示,鼠标放上去显示具体名称和数值 原样式如下 2.业务实现 调整代码如下,核心语句已标记注释 option = { title: { text: 'R ...
- UBUNTU18.04安装使用ORB-SLAM2
1.下载: git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2 2.依赖项: sudo apt install autotools ...
- Thymeleaf的内置对象、SpringBoot整合Thymeleaf和JDBC
Thymeleaf的对象 Thymeleaf是直接支持访问Servlet web的原生资源,HttpServletRequest HttpServletResponse HttpSession Ser ...
- 集合类再探:不可变类的好处,Collector接口详解,使用内部迭代
集合类再探 注:本文使用的pom依赖见文末. 集合类的基础 - Iterable.Iterator java语言层面支持对实现了Iterable接口的对象使用for-each语句.Iterator可以 ...
- 取出每个分组的的第一条数据sql
select * from(select id,detail, ROW_NUMBER()over(PARTITION By detail ORDER BY detail DESC) as rnfrom ...
- Cesium渲染模块之Buffer
1. 引言 Cesium是一款三维地球和地图可视化开源JavaScript库,使用WebGL来进行硬件加速图形,使用时不需要任何插件支持,基于Apache2.0许可的开源程序,可以免费用于商业和非商业 ...
- JZOJ 6664. 【2020.05.28省选模拟】最优化
\(\text{Solution}\) 原题:\(\text{Honorable Mention}\) 一个费用流做法,\(S\) 向 \(2i-1\) 连流量为 \(1\),费用为 \(0\) 的边 ...
- LeetCode-2038 如果相邻两个颜色均相同则删除当前颜色
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-colored-pieces-if-both-neighbors-are-the-s ...