shell高级特性-4
1、shell模块
shell脚本中可以加载配置文件或调用已经完成函数或脚本。
a、加载配置文件
新建配置文件config,插入以下代码:
reboot_mode=True
在同一路径下,新建文件module.sh,插入以下代码:
#!/bin/bash
#可以简写为:. config
source config
echo "reboot mode is: ${reboot_mode}"
输出:
reboot mode is: True
b、使用其它文件中定义的函数
新建文件add.sh,插入以下代码:
#!/bin/bash
function add(){
x=$
y=$
echo "`expr ${x} + ${y}`"
}
在同一路径下module.sh中,插入以下代码:
#!/bin/bash
#可以简写为:. config
source config
echo "reboot mode is: ${reboot_mode}" #加载add模块
. add.sh
echo " 1 + 2 result is: $(add 1 2)"
输出:
reboot mode is: True
+ result is:
2、局部变量和全局变量
#局部变量只能在函数中定义,不加local即为全局变量,语法如下:
local var_name=val
示例:
function say_hi(){
local str1="hi"
name=$
echo "${str1},${name},Nice to meet you!"
}
say_hi "Vicent"
#在函数外打印name和str1
#str1为局部变量,无法在函数外引用
echo "val of str1 is: ${str1}"
#name为全部变量,输出为Vicent
echo "val of name is: ${name}"
输出:
hi,Vicent,Nice to meet you!
val of str1 is:
val of name is: Vicent
3、重定向
重定向分为输入重定向和输出重定向向两种。重定向就是改变标准输入和输出的方向。标准的输入方向为从键盘到程序,标准的输出方向是从程序到屏幕。
为了区别文件,给每个文件分配一个整数,这个就是文件描述符。
- 标准输入的文件名为stdin,文件描述符为0
- 标准输出的文件名为stdout,文件描述符为1
- 标准错误输出文件名为stderr,文件描述符为2
输出重定向是值输出不再是屏幕,一般是文件,这样可以方便保存与查看。
示例1:
#命令>文件,以覆盖的方式把命令的正确结果输出到文件中
ls -all > a.txt
cat a.txt
输出1:
总用量
drwxr-xr-x stephen stephen 4月 : .
drwxr-xr-x stephen stephen 4月 : ..
-rw-rw-r-- stephen stephen 4月 : add.sh
-rw-r--r-- stephen stephen 4月 : a.txt
-rw-r--r-- stephen stephen 4月 : config
-rw-rw-r-- stephen stephen 4月 : module.sh
示例2:
#ll命令不存在,所以会报错。以覆盖的方式把标准输出和标准错误输出重定向到文件b.txt中
date;ll > b.txt >&
cat b.txt
输出2:
2019年 04月 04日 星期四 :: CST
module.sh: 行 : ll: 未找到命令
示例3:
#ll命令不存在,所以会报错
#ll命令不存在,所以会报错。以追加的方式把标准输出和标准错误输出重定向到文件b.txt中
date > b.txt
date;ll >> b.txt >&
cat b.txt
输出3:
2019年 04月 04日 星期四 :: CST
2019年 04月 04日 星期四 :: CST
module.sh: 行 : ll: 未找到命令
4、声明变量类型
#用来设置变量的属性,语法如下:
declare [+/-] [aAfFgilprtux] [name=val]
#+设置属性,取消属性 ,i表示整数 r表示只读变量等
示例1:
declare -i m=
echo ${m}
输出1:
示例2:
declare -i n="Hello"
echo ${b}
输出2:
5、read和位置参数
示例1:
#用来从标准输出中读取数据并赋值
#示例
read -t -sp "Please input your password : " passwd
if [ ${passwd} = "" ] ;then
echo "login sucess."
else
echo "login fail."
fi
- -t, 超时时间,单位为s
- -s,静默模式,屏幕上不显示输入
- -p,显示提示信息
输出1:
Please input your password : login sucess.
位置参数
示例2:
插入以下代码并保存为module.sh
echo "First arg is: $1"
echo "Second arge is :$2"
echo "All args is : $*"
echo "Total args num is:$#
输出2:
First arg is: Hello
Second arge is :World
All args is : Hello World
Total args num is:
6、shell调试
使用-x参数调试shell脚本,通过-x可以看到运行过程中变量取值与运行情况。
示例1:
以下代码保存到test.sh中
#!/bin/bash
function say_hi(){
local str1="hi"
declare -i name
name=$
echo "${str1},${name},Nice to meet you!"
}
say_hi "Vicent"
调试脚本test.sh
/bin/bash -x test.sh
预期输出为:
hi,Vicent,Nice to meet you!
实际输出1:
+ say_hi Vicent
+ local str1=hi
+ declare -i name=Vicent
+ echo 'hi,0,Nice to meet you!'
hi,,Nice to meet you
通过 -x打印出来的信息可以看到name变量为强制声明为整数,所以把字符串装换成了数字0。
shell高级特性-4的更多相关文章
- 自学Linux Shell18.2-sed编辑器高级特性
点击返回 自学Linux命令行与Shell脚本之路 18.2-sed编辑器高级特性 linux世界中最广泛使用的两个命令行编辑器: sed gawk 1. sed小结 命令格式: 1 sed [opt ...
- 自学Linux Shell19.2-gawk程序高级特性
点击返回 自学Linux命令行与Shell脚本之路 19.2-gawk程序高级特性 linux世界中最广泛使用的两个命令行编辑器: sed gawk 1. gawk使用变量 编程语言共有的特性是使用变 ...
- ActiveMQ中的Destination高级特性(一)
---------------------------------------------------------------------------------------- Destination ...
- Python3学习(二)-递归函数、高级特性、切片
##import sys ##sys.setrecursionlimit(1000) ###关键字参数(**关键字参数名) ###与可变参数不同的是,关键字参数可以在调用函数时,传入带有参数名的参数, ...
- 云端卫士实战录 | Java高级特性之多线程
<实战录>导语 一转眼作为一名Java开发者已经四年多时间了,说长不长说短不短,对于java的感情还是比较深的,主要嘛毕竟它给了我饭吃.哈哈,开个玩笑.今天我想借此机会来和大家聊聊Java ...
- javascript高级特性
01_javascript相关内容02_函数_Arguments对象03_函数_变量的作用域04_函数_特殊函数05_闭包_作用域链&闭包06_闭包_循环中的闭包07_对象_定义普通对象08_ ...
- Visual Studio 2015 速递(4)——高级特性之移动开发
系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...
- Android TextView高级特性使用
TextView一般都是用来显示一段文本,这里说的高级特性主要是一些我们平常不太常用的属性.包括文字阴影.自定义字体.html嵌入多格式.字体加粗.插入图片.这些特性平时开发APP的时候,可能一般使用 ...
- Python的高级特性8:你真的了解类,对象,实例,方法吗
Python的高级特性1-7系列是本人从Python2过渡3时写下的一些个人见解(不敢说一定对),接下来的系列主要会以类级为主. 类,对象,实例,方法是几个面向对象的几个基本概念,其实我觉得很多人并不 ...
随机推荐
- ISP PIPLINE (九_1) Denoise 之 space domain denoise
1.空间域噪声类型 1.gauss+possion 2.椒盐噪声(dpc处理已经处理了) 去除空域噪声有哪些方法? 空域噪声一般的思想是对某pixel邻域的pixels进行加权平均. 比如 1.高斯降 ...
- PCB Mark点相关
1)Mark点用于锡膏印刷和元件贴片时的光学定位.根据Mark点在PCB上的作用,可分为拼板Mark点.单板Mark点.局部Mark点(也称器件级MARK点) 2)拼板的工艺边上和不需拼板的单板上应至 ...
- [jzoj]3506.【NOIP2013模拟11.4A组】善良的精灵(fairy)(深度优先生成树)
Link https://jzoj.net/senior/#main/show/3506 Description 从前有一个善良的精灵. 一天,一个年轻人B找到她并请他预言他的未来.这个精灵透过他的水 ...
- 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第6章编程练习6
#include <iostream> #include <string> using namespace std; const int MSIZE=100; struct j ...
- 上传插件webupload之调用拍照兼容问题
在项目中,移动端用到了webupload插件来实现上传功能(我觉得这个插件挺好用的,所以无论pc还是移动端我都使用了这个插件来做上传功能) 在移动端要调起拍照功能,实现上传,须得在webuploade ...
- 关于A2C算法
https://github.com/sweetice/Deep-reinforcement-learning-with-pytorch/blob/master/Char4%20A2C/A2C.py ...
- msxfs.dll函数加载代码
msxfs.dll函数加载代码 #include "stdafx.h" #include "WSXFSLoader.h" NS_AWP_DEVICE_WOSA_ ...
- UVALive 2474 Balloons in a Box(枚举)
https://vjudge.net/contest/277824#problem/A 尤其是模拟题,三思而后敲!!! 纠错了好久,主要还是没有处理好:单点若还未放气球,其他气球可以膨胀越过它(即可以 ...
- web移动端开发技巧
一.meta的使用 1.<meta name="viewport" content="width=device-width,initial-scale=1.0, m ...
- 搭积木(java)-蓝桥杯
搭积木小明最近喜欢搭数字积木,一共有10块积木,每个积木上有一个数字,0~9.搭积木规则:每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小.最后搭成4层的金字塔形,必须用完所有的积木.下 ...