shell中脚本与函数的使用策略
脚本:运行的副作用不影响父环境,开辟了fork子进程;
函数:副作用,定义的变量,数据默认直接添加到了调用者的环境,也是它自己的环境;不想副作用影响调用者环境,就必须主动用local修饰;
shell 中的参数只有一种类型:字符串,或者数字意义的字符串;使用=就意味着对变量进行赋数值,右边默认为字符串变量
函数中要使用传数组只能:
1.数组可以转换成字符串传入函数;
2.不使用参数,使用全局数组
双引号在shell 中意义非凡,它不仅仅代表字符串,被它包起来的数组"${arrname[@]}",代表一个字符串,其中数组元素的分隔符为空格;
被双引号包住的包含换行符号的数据(通常是输入输出pipe),也代表了,换行符号换成空格分隔符后的数据;
IFS 对字符串分隔有影响,对${arrname[@]} 无影响,对${armname[*]} 有影响
#root@c7hp:/cmd/fun IFS=';'
#root@c7hp:/cmd/fun echo "${jfstack[@]}"
pwd /root /cmd /cmd/fun
#root@c7hp:/cmd/fun echo "${jfstack[*]}"
pwd;/root;/cmd;/cmd/fun
#root@c7hp:/cmd/fun echo ${jfstack[*]}
pwd /root /cmd /cmd/fun
#以上分为两部分:数组数据提取 数据转换为字符串
@ echo 本身都有自己的字符串转换逻辑,并且其中没有使用公共环境设置的IFS
只有 " [*]"的组合使用了自己定义的IFS
#root@c7hp:/cmd/fun a=1
#root@c7hp:/cmd/fun echo $a
1
#root@c7hp:/cmd/fun echo ${a[0]}
1
变量与数组之间无缝扩展
awk 可以把字符串,正则,作为分隔符;
sed 可以把分隔符 替换成字符串
tr ,IFS只能把分隔符作单个字符替换;
# 参数列表变量$n 默认就是有字符串化的,不管用不用引号,用单双引号,都对它的参数化进程没有影响.
脚本可以使用source退化为函数;
尽量使用脚本,而不是函数,除非函数本身就是系统级别的作用范围;
使用脚本的好处
1.把函数封装在脚本中可以形成类似于文件范围的访问隔离;
2.脚本是文件级别的东西,文件目录,绝对路径本身就给它带来版本区分,作用范围划分的优势.
3.linux文件有缓存机制,脚本不会明显的比内存中的函数慢,而且4.2以上版本的bash还可能直接把命令名和脚本路径hash绑定.
4.函数从文件加载到环境后,修改函数需要重写后需要重新加载.脚本文件不存在这个步骤. 函数也是要用脚本文件落地到磁盘的.
shell中脚本与函数的使用策略的更多相关文章
- shell中脚本变量和函数变量的作用域
http://blog.csdn.net/ltx19860420/article/details/5570902 1. shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到she ...
- [Z] Shell中脚本变量和函数变量的作用域
在shell中定义函数可以使代码模块化,便于复用代码.不过脚本本身的变量和函数的变量的作用域问题可能令你费解,在这里梳理一下这个问题. (1)Shell脚本中定义的变量是global的,其作用域从被定 ...
- Shell中脚本变量的作用域
原文地址:http://blog.csdn.net/abc86319253/article/details/46341839 在shell中定义函数可以使代码模块化,便于复用代码.不过脚本本身的 ...
- shell中脚本调试----学习
1.使用dos2unix命令处理在windows下开发的脚本 将windows下编辑的脚本放置到linux下执行的情况如下: [root@ks ~]# cat -v nginx.sh #!/bin/b ...
- shell编程学习笔记(五):Shell中脚本的参数
在执行Shell脚本的时候,可以在执行时带上参数,相当于传递参数给脚本,下面我们看一下怎么使用这个参数 以下蓝色字体部分为Linux命令,红色字体的内容为输出的内容: # cd /opt/script ...
- shell中脚本参数传递getopts
while getopts ":a:b:c:" opt do case $opt in a) echo "参数a的值$OPTARG" ;; b) echo &q ...
- shell中的函数、shell中的数组、告警系统需求分析
7月16日任务 20.16/20.17 shell中的函数20.18 shell中的数组20.19 告警系统需求分析 20.16/20.17 shell中的函数 函数就是一个子shell就是一个代码段 ...
- Shell脚本之八 函数
一.函数定义 Linux shell 可以用户定义函数,然后在shell脚本中可以随便调用. shell中函数的定义格式如下: [ function ] funname [()] { action; ...
- 05- Shell脚本学习--函数
函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高.像其他编程语言一样,Shell 也支持函数.Shell 函数必须先定义后使用. 函数定义 Shell 函数的定义格式 ...
随机推荐
- Jquery封装的Ajax
$.get方法 语法: $.get(url,data,function(e){ //e就是服务器返回的数据 },dataType); 四个参数: url: 请求的服务器地址 data: 发送给服务器的 ...
- mysql5.7版本tar包手动安装---redhat7.0
1.官网下载安装包,删除系统自带的mariadb,查到几个包,卸载几个包,总之得删除干净 [root@localhost Desktop]# yum list | grep mariadb maria ...
- 超简DbHelper
using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Dynamic; n ...
- Angular7.1.4+Typescript3.1框架学习(三)
接着第二部分,这部分介绍常见angular指令使用 1. 在父页面文件中添加组件(通过ng命令生成的component) <app-messages></app-messages&g ...
- leetcode71
这道题很简单,大约是词法分析器差不多的原理.但是我觉得看了别人简洁的代码后还是很有收获的.本人的冗余代码就不好意思放上来了,以下是别人的参考代码和值得借鉴的地方: class Solution { p ...
- C++标准模板库(STL)之Stack
1.Stack的常用用法 stack:栈,一个后进先出的容器. 1.1.stack的定义 加上头文件#include<stack>和using namespace std; stack&l ...
- 配置rpm本地源及局域网环境下使用
LInux个人开发过程中可以直接连到公网,所以想要安装各种软件时直接安装即可,但工作环境往往很让人头疼. 如果应用场景是没法链接外网的,公司内部绝大多数情况下是在自己的局域网下玩,这时候想装个软件是相 ...
- 运用jieba库 寻找高频词
一.准备 1.首先 先用cmd 安装 jieba库,输入 pip install jieba 2.其次 本次要用到wordcloud库和 matplotlib库,也在cmd输入pip install ...
- Python logging系统
我们都知道python在2.x之后自带了一个模块import logging. 但是每次都要写log很麻烦,同时我想把info,debug之类的指令通过颜色分离开来. 于是写了一个简单的类似glog的 ...
- learning makefile ?=