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、重定向

重定向分为输入重定向和输出重定向向两种。重定向就是改变标准输入和输出的方向。标准的输入方向为从键盘到程序,标准的输出方向是从程序到屏幕。

为了区别文件,给每个文件分配一个整数,这个就是文件描述符。

  1. 标准输入的文件名为stdin,文件描述符为0
  2. 标准输出的文件名为stdout,文件描述符为1
  3. 标准错误输出文件名为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的更多相关文章

  1. 自学Linux Shell18.2-sed编辑器高级特性

    点击返回 自学Linux命令行与Shell脚本之路 18.2-sed编辑器高级特性 linux世界中最广泛使用的两个命令行编辑器: sed gawk 1. sed小结 命令格式: 1 sed [opt ...

  2. 自学Linux Shell19.2-gawk程序高级特性

    点击返回 自学Linux命令行与Shell脚本之路 19.2-gawk程序高级特性 linux世界中最广泛使用的两个命令行编辑器: sed gawk 1. gawk使用变量 编程语言共有的特性是使用变 ...

  3. ActiveMQ中的Destination高级特性(一)

    ---------------------------------------------------------------------------------------- Destination ...

  4. Python3学习(二)-递归函数、高级特性、切片

    ##import sys ##sys.setrecursionlimit(1000) ###关键字参数(**关键字参数名) ###与可变参数不同的是,关键字参数可以在调用函数时,传入带有参数名的参数, ...

  5. 云端卫士实战录 | Java高级特性之多线程

    <实战录>导语 一转眼作为一名Java开发者已经四年多时间了,说长不长说短不短,对于java的感情还是比较深的,主要嘛毕竟它给了我饭吃.哈哈,开个玩笑.今天我想借此机会来和大家聊聊Java ...

  6. javascript高级特性

    01_javascript相关内容02_函数_Arguments对象03_函数_变量的作用域04_函数_特殊函数05_闭包_作用域链&闭包06_闭包_循环中的闭包07_对象_定义普通对象08_ ...

  7. Visual Studio 2015 速递(4)——高级特性之移动开发

    系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...

  8. Android TextView高级特性使用

    TextView一般都是用来显示一段文本,这里说的高级特性主要是一些我们平常不太常用的属性.包括文字阴影.自定义字体.html嵌入多格式.字体加粗.插入图片.这些特性平时开发APP的时候,可能一般使用 ...

  9. Python的高级特性8:你真的了解类,对象,实例,方法吗

    Python的高级特性1-7系列是本人从Python2过渡3时写下的一些个人见解(不敢说一定对),接下来的系列主要会以类级为主. 类,对象,实例,方法是几个面向对象的几个基本概念,其实我觉得很多人并不 ...

随机推荐

  1. MSDN i TELL YOU 又更新了,win10 1809版本的 3月29日的

    MSDN i TELL YOU 又更新了,1809版本的 3月29日的 WINDOWS 10 现在只有64位的 很好,估计 64位的普及了. 是一大改变

  2. 主流图库对比以及JanusGraph入门

    1.Overall Comparison Name Neo4j JanusGraph Giraph Jena 1.Compute Framework Yes Yes Yes 2.External Co ...

  3. js合并table指定列

    function MergeTableCell(tableId, startRow, endRow, col) { var tb = document.getElementById(tableId); ...

  4. MyBatis返回map数据

    (1)接口中编写方法 //单行 public Map<String, Object> getEmpReturnMap(Integer id); //多行 @MapKey("id& ...

  5. jQuery 动态绑定插件livequery的用法

  6. javascript中的函数节流和函数去抖

    带着问题去尝试 首先我们要知道为什么要用到函数节流和函数去抖?我们带着以下的疑问来进行分析! 1.比如搜索框,你会用到什么事件(change.blur.keyup等)?去做什么效果?2.再比如scro ...

  7. MangoDb的安装及使用

    安装步骤 一.创建文件 vi /etc/yum.repos.d/mongodb-org-3.6.repo 二.配置文件内容 [mongodb-org-3.6] name=MongoDB Reposit ...

  8. 2019_BUAAOO_第二单元总结

    第一次作业:单部多线程傻瓜调度电梯 设计策略 本次作业我才用的是生产者消费者模式,创建一个RequestList类,将输入线程InputThread作为生产者,负责将请求放入RequestList:将 ...

  9. d3.js,初遇

    接触d3完全是由兴趣所致,废话不多说看代码: var dataArray = [23, 13, 21, 14, 37, 15, 18, 34, 30];这是这个图所需要的数据,其实这个柱状图最初不长这 ...

  10. Java作业十二(2017-11-13)

    /*继承与抽象类*/ package com.baidu.www; abstract class Person { private String name; private int age; publ ...