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. windows server 远程桌面连接问题。

    远程桌面连接相当于 linux 服务器root权限连接 mstsc /admin /v:目标IP mstsc /admin /

  2. PHP如何搭建百度Ueditor富文本编辑器

    本文为大家分享了PHP搭建百度Ueditor富文本编辑器的方法,供大家参考,具体内容如下 下载UEditor 官网:下载地址 将下载好的文件解压到thinkphp项目中,本文是解压到PUBLIC目录下 ...

  3. Tomcat6,7,8的日志切割

    使用的日志切割工具cronolog(yum就可以了) 确定好路径后,开始配置 Tomcat6 Tomcat6/bin/catalina.sh 292-317行(修改两处) 修改之后为下面的内容 # t ...

  4. php基础-cookie&session

    设置cookie //设置cookie setcookie('key', 'value', time() + 60, '/'); 设置session //必须开启session session_sta ...

  5. Eureka-Client(Golang实现)

    Eureka-Client Golang实现eureka-client 原理 根据Java版本的源码,可以看出client主要是通过REST请求来与server进行通信. Java版本的核心实现:co ...

  6. vue+element-ui之tree树形控件有关子节点和父节点之间的各种选中关系详解

    做后端管理系统,永远是最蛋疼.最复杂也最欠揍的事情,也永远是前端开发人员最苦逼.最无奈也最尿性的时刻.蛋疼的是需求变幻无穷,如同二师兄的三十六般变化:复杂的是开发难度寸步难行,如同蜀道难,难于上青天: ...

  7. Reveal : Xcode辅助界面调试工具

    Reveal简介: Reveal是一款iOS界面调试工具,辅助Xcode进行界面调试,使用它可以在iOS开发的时候动态的查看和修改应用程序的界面. 软件下载 首先去官网下载Reveal,下载地址:ht ...

  8. python-邮件提醒功能

      当scrapy爬取完成以后会发送详细信息到邮箱 1.首先编写邮件发送模块 #!usr/bin/env python # -*- coding:utf-8 -*- """ ...

  9. VIM批量缩进

    方法一 1.按 ctrl + shif + ;  进入底行模式 2.将所要批量缩进的行号写上,按照格式:“行号1,行号2>”输入命令,如要将4至11行批量缩进一个tab值,则命令为“4,11&g ...

  10. 【阿里聚安全·安全周刊】女主换脸人工合成小电影|伊朗间谍APP苹果安卓皆中招

    本周的七个关键词: 人工智能 丨 HTTP链接=不安全链接 丨  滑动验证码 丨 伊朗间谍APP 丨 加密挖矿 丨  Android应用测试速查表 丨 黑客销售签名证书 -1-   [人工智能]女主换 ...