shell 脚本学习之一 ------let,echo,变量
转自:http://blog.chinaunix.net/uid-26827001-id-3154024.html
首先看到好多以这样开头的 #!/bin/bash 这个是告诉系统 解释此脚本文件的Shell程序
# 这个是注释行,当行有效
脚本程序一般用 xx.sh 文件表示,这样一样就可以看出文件的属性,当然也可以不这样
一个脚本程序写完后,如果要执行它,则必须先赋+x 执行权限给它
例如:chmod +x xx.sh,然后用命令 ./filename 执行
以下是一些知识点:
1. echo :用于显示(不带参数,如果有多行则换行输出) 例如:echo "hello shell"
如果加上参数 -n 表示如果有多行的话,将不换行输出
点击(此处)折叠或打开
- #!/bin/bash
- # filename is while.sh
- count=0
- while(($count < 5 ))
- do
- echo -n " count=" $count
- let count=count+1
- done
顺便说一句,linux提供2中命令:一种是内部命令,一种是外部命令。解释执行内部命令要比外面命令快的 多, 同时,解释内部命令时候,shell不需要创建子进程,而外部命令则需要创建子进程,这就增大了系统的开销。查看是不是内部命令,可以用如下命令:type command
例如:type echo
2. $xx 表示引用变量:如上面的代码中,第三行定义了变量count,
第四行,第六行 $count 则引用该变量。
3. 位置变量
: $0 文件名,$1 第一个参数 $2 第二个参数
点击(此处)折叠或打开
- #!/bin/bash
- #filename is first.sh
- #have 3 parameter to first.sh
- #command is: ./first.sh 1 2 3
- # $#:传入脚本的参数个数
- # $*:显示所以的参数,并以空格隔开
- # $0:命令本身,即要执行的文件名
- # $1:第一个参数
- # $2:第二个参数
- # $3:第三个参数 后面一样 ~等等
- echo "number of vars:"$#
- echo "var of vars:"$0
- echo "first var:"$1
- echo "second var:$2
- echo "third var:$3
4. let :用来执行算数运算和数值表达式测试。
let 命令的替代表示形式是: ((算术表达式)) ,这样做的好处是如果表达式中含有特殊的字符,可以告示shell 进行特殊处理:例如,let ″val=a|b″。如果不括起来,Shell会把命令行let val=a|b中的“|”看成管道符,将其左右两边看成不同的命令,因而无法正确执行。
以下代码执行结果为:1 3 7 10
点击(此处)折叠或打开
- #!/bin/bash
- #filename is let.sh
- i=1
- echo "i="$i
- let i=i+2
- echo "i="$i
- let "i=i+4"
- echo "i="$i
- ((i+=3))
- echo "i="$i
5. 函数调用:声明函数
function name(){~~~~},函数的调用,直接写函数名称name即可。
点击(此处)折叠或打开
- #!/bin/bash
- # filename is second.sh
- # 函数申明和调用
- function fun1(){
- local a="hello world"
- echo "函数调用成功 "$a
- }
- echo "函数调用前"
- fun1
- echo "函数调用结束"
6. Shell中的变量种类:局部变量和全局变量
局部变量 是在函数中用local
声明的变量:他的作用域是在函数调用开始到函数结束。
全局变量 在shell脚本下声明的变量,他的作用域是整个shell的生存周期内。shell结束,全局变量的周期也结束。
点击(此处)折叠或打开
- #!/bin/bash
- #filename is localvar.sh
- var1="hello shell"
- function fun(){
- #定义局部变量
- local var2="hello local variable"
- echo "在函数中 使用局部变量 var2="$var2
- echo "调用全局变量1 var1="$var1
- }
- fun
- echo "在函数外调用 局部变量 var2="$var2
- echo "调用全局变量2 var1="$var1
补充:环境变量、位置变量、标准变量、特殊变量等
环境变量:用于所有的用户进程,可以看成是windows下的环境变量,用export定义:如
export LOGNAME="fjsm20", 可以用env或export查看系统环境变量
位置变量:就是调用函数时候的参数,例如:./first.sh 11 22 33 如上面的第3知识点
标准变量:就是bash环境建立的一些标准环境的标量,他会自动去解析,基本都在/etc/profile中定义了有EXINIT,HOME,IFS,LOGNAME,MAIL,MAILCHECK等(引用网上资料)
特殊变量:
$# 参数个数,$* 列出所有参数,$!显示后天脚本的进程Id ,$$显示当成脚本的进程id,$? 最后命令退出的状态,0 表示正常;
shell 脚本学习之一 ------let,echo,变量的更多相关文章
- shell脚本学习-变量
跟着RUNOOB网站的教程学习的笔记 shell变量 shell变量的命名 定义变量时,变量名不加美元符号($,PHP语言中需要),如: name="runoob" 注意,变量名与 ...
- 【Shell脚本学习6】Shell变量:Shell变量的定义、删除变量、只读变量、变量类型
Shell支持自定义变量. 定义变量 定义变量时,变量名不加美元符号($),如: variableName="value" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编 ...
- 转 shell脚本学习指南
shell脚本学习指南 以下八点不敢说就能成为你shell脚本学习指南de全部,至少可以让你编写出可靠的shell脚本. 1. 指定bashshell 脚本的第一行,#!之后应该是什么?如果拿这个问题 ...
- shell脚本学习总结02--数组
bash同时支持普通数组个关联数组,普通数组只能使用整数作为数组的索引,关联数组可以使用字符串作为数组的索引. 数组的定义方法: 在单行中使用一列值定义一个数组 [root@new ~]# array ...
- Shell脚本学习指南笔记
Shell脚本学习指南 作者:Danbo 2015-8-3 脚本编程语言与编译型语言的差异 许多中型.大型的程序都是用编译型语言写的,例如:C.C+.Java等.这类程序只要从源代码(Source C ...
- shell脚本学习之6小时搞定(1)
shell脚本学习之6小时搞定(1) 简介 Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本. Unix/Linux上常见的Shell脚本解释器有bash.sh.csh.ksh等,习惯上把 ...
- shell脚本学习(一)
1.hbg@HWM:/$ su root密码:root@HWM:/# $表示普通用户, #表示管理员用户root.root是linux系统中权限最高的用户. 2.在bash中,每个变量的值都是字符串. ...
- shell脚本实现监控shell脚本的执行流程及变量的值
这篇文章主要介绍了shell脚本实现监控shell脚本的执行流程及变量的值本文使用shell完成对执行过程中条件语句中的变量的变化的监控和整个程序的执行流程的观察功能,需要的朋友可以参考下 很多时候, ...
- 【shell脚本学习-3】
part-1 #!/bin/bash:<<FTP#test [ 1 -eq 2] #条件测试x="abc" #不允许有空格y="abc" [ &qu ...
随机推荐
- 17 nginx连接memcached
一:配置php扩展memcached wget http://memcached.googlecode.com/files/memcached-1.4.9.tar.gz # tar zvxf memc ...
- C#之stream
在C#中经常要用stream stream下面主要有 FileStream:使用文件作为后备设备. BufferedStream:使用缓冲区作为后备设备,用来增强性能的中间存储. MemoryStre ...
- python 基础 5.1 python 构造器
一. 类的构造器 __init__ 构造函数,在生成对象时调用.由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去.通过定义一个特殊的__init__方法, ...
- python 基础 2.2 if流程控制(二)
一. if else 1.逻辑值(bool)包含了两个值: ----True:表示非空的值,比如:string ,tuple,list,set,dictonary,所有非空的序列. -----F ...
- 无法远程访问 MySql Server
改表法.可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "use ...
- protobuf + maven 爬坑记
疯狂创客圈 死磕Netty 亿级流量架构系列之20 [博客园 总入口 ] 本文说明 本篇是 netty+Protobuf 整合实战的 第一篇,完成一个 基于Netty + Protobuf 实战案例. ...
- WordPress升级出现Briefly unavailable for scheduled maintenance. Check back in a minute.
WordPress升级出现Briefly unavailable for scheduled maintenance. Check back in a minute. 打开博客时提示: Brief ...
- SpringBoot学习笔记(1):配置Mybatis
SpringBoot学习笔记(1):配置Mybatis 反思:如果自己写的笔记自己都看不懂,那就不要拿出来丢人现眼! IDEA插件 Free MyBatis Plugin插件可以让我们的MyBatis ...
- springmvc fastjson 反序列化时间格式化
第一种情况是从后台拿到数据,进行反序列化,反序列化格式时间:试了一下很多网上的方法,最后发现还是在实体类上面的日期字段加上如下注解,可以完成格式化操作,否则默认就都是时间戳的格式: @JSONFiel ...
- 2018年东北农业大学春季校赛 E wyh的阶乘 【数学】
题目链接 https://www.nowcoder.com/acm/contest/93/E 思路 其实就是找阶乘的项中5的个数 末尾为什么会出现0 因为存在5的倍数和偶数相乘 有0存在 借鉴 htt ...