shell脚本1——变量 $、read、``

与Shell变量相关的几个命令:

变量只在当前Shell中生效.

source 这个命令让脚本影响他们父Shell的环境(. 可以代替source命令)

export 这个命令可以让脚本影响其子Shell的环境  ()

unset 从环境中删除变量

 

其他几个与变量有关的命令:

declare: 用于显示或设置变量

let: 用于求整数表达式的值

local: 用于创建不能传给子Shell的变量, 这个命令仅在过程内部有效

readonly: 用于显示或者设置只读变量

set: 用于设置或者重置各种Shell选项(不仅用于变量)

shift: 用于移动位置变量

typeset: 用于显示或者设置变量(同declare)

 

变量赋值

logfile="stdout.log"
echo "$logfil"

1、变量赋值——没有类型,根据赋值的类型决定变量类型,可以多次随意赋值。赋值号两边不能有空格

1)显示定义:VAR=value

变量声明时使用的引号不会被保留,当变量值中有空格时必须使用引号

2)读取:read VAR

      • 一次读入一行! 可以一次读入多个变量read。

        • read firstname lastname
          输入:steve Parker Smith    以空格分,最后一个变量两个
          输入:steve 给的少,后一个变量为空字符串,一直存在于shell中,可以在当前shell中用set | grep name=查看
      • 从文件读入
        • read password < /etc/passwd读入一行
          while read passwd
          doecho $passwd
          done < /etc/passwd一直循环读,直到不再输入
      • read -p “what file do you want to test?" filename 命令替换:
    • 命令赋值:VAR=`date`、 VAR=$(date)
    • 数值计算:c=`expr $a +4`、c=let $a + 4  、$(($a+$b))  但也有点区别:有的shell不支持,是否有对非数值进行的先验(expr没有)
  • 将变量值设置为某个给定命令的输出,其时是第一种赋值方式的变种
    • TODAY=`date +%A`动态赋值

 

引用变量

2、引用变量——的格式是${变量名}   $(variable)bar    echo $variable bar ${variable}bar

访问不存在的变量只会返回空字符串或0,具体取决与上下文,所以当将某个变量名写错时,不会报错,还能有结果; 

变量名区分大小写

 

3、支持一维数组变量:

[lixn@localhost ~]$ Users=(zsan lisi wangwu zhangsan lisi)  定义一维数组
[lixn@localhost ~]$ echo $Users                  索引
zsan
[lixn@localhost ~]$ echo ${Users[0]}
zsan
[lixn@localhost ~]$ echo ${Users[2]}
wangwu
[lixn@localhost ~]$ echo ${Users}
zsan
[lixn@localhost ~]$ echo ${Users[*]}
zsan lisi wangwu zhangsan lisi
[lixn@localhost ~]$ echo ${#Users[*]}       返回数组长度
5
[lixn@localhost ~]$ echo ${#Users[2]}       返回元素值的长度
6
[lixn@localhost ~]$ Users[1]=wlm          修改值
[lixn@localhost ~]$ Account=(${Users[*]})     数组之间赋值
[lixn@localhost ~]$ echo ${Account[*]}
zsan wlm wangwu zhangsan lisi

 

特殊变量

${#var} 变量的长度

特殊变量由bash自动定义和赋值,用户不能修改。

$$:当前进程号

$?:前一个命令的退出状态,0表示执行成功,1标志执行失败

$0:存储命令本身——位置参数

$1-$n:依次代表命令行参数,当大于9时,用{}括起来,如${10}——位置参数

$#:命令行参数的个数,不包括命令本身

$*:保存了全部的命令行参数。不包含命令本身 $@

$!:后台程序的pid

 

其他

basename命令——去掉位置参数的路径信息,所以./scropt.sh、/usr/local/bin/script.sh等会被转化为script.sh

Myname is `basename $0`

shift命令——多用于“下一个参数”,shift内置命令每次调用时将所有参数进行一次移位,首先截去$1,然后截去$2....无法将移位逆向进行。

    shift也可以一次截去多个变量(shift 3  或者  shift shift shift)多用后者

#!/bin/bash
echo "My name is `basename $0` - I was called as $0"
echo "I was called with $# parameters."
count=1
while [ "$#" -ge "1" ]; doecho "Parameter number $count is: $1"let count=$count+1shift
done[lixn@Fedora24 bash_learn]$ ./shift.sh 
My name is shift.sh - I was called as ./shift.sh
I was called with 0 parameters.
[lixn@Fedora24 bash_learn]$ ./shift.sh one two three
My name is shift.sh - I was called as ./shift.sh
I was called with 3 parameters.
Parameter number 1 is: one
Parameter number 2 is: two
Parameter number 3 is: three

$*和$@的使用与区别

 

删除变量——unset myvar;将变量赋值为空字符串也能实现变量的删除,但与unset不完全相同

 

转载于:https://www.cnblogs.com/daduryi/p/6627660.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372555.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

令人印象深刻的第一个Apache Camel版本

为了准备下周的CamelOne会议&#xff0c;我花了一些时间回顾一下Apache Camel项目的历史。 因此&#xff0c;除其他外&#xff0c;我了解了Apache Camel的第一个正式1.0版本 。 Apache Camel 1.0 – 5年前 我看的越多&#xff0c;这个版本的事实给我留下了深刻的印象。 现在您…

Linux禁用user01账户,Linux 管理用户 useradd

创建用户、设置密码、修改用户、删除用户&#xff1a;useradd testuser 创建用户testuseruseradd [选项]useradd 命令选项-u uid:指定新用户的uid,默认用当前最大uid加1-g group:指定新用户所在的组(私有组),该组必须存在-G group:指定新用户的附加组-d dir:指定新用户的自家目…

css小细节

1. 文字居中显示 水平居中&#xff1a; text-align: center; 垂直居中&#xff1a; line-height: (height); 2.子元素相对于父元素的绝对布局。 父元素一定要 position: relative/absolute/fixed; 默认position 是static 转载于:https://www.cnblogs.com/zcancandice/p/5…

为什么在2012/2013年我将在新的Enterprise Java项目中继续使用Spring *和* Java EE

自从我担任技术决策职务以来已经过去了一年多&#xff0c;很高兴看到我仍然与之保持着完美的和谐。 几个月前&#xff0c;我在KaiWhner的一个不错的博客中写了一个有关JEE与Spring的答案。 如果观点没有不同&#xff0c;那么讨论的附加值在哪里&#xff1f; 我确实同意Kai的许多…

linux ubuntu 五笔输入法,ubuntu下安装fcitx五笔输入法

安装fcitx输入法sudo add-apt-repository ppa:fcitx-team/stable #添加安装源&#xff0c;apt-get 添加&#xff0c;nightly源也可以sudo apt-get update #更新源&#xff0c;否则无法安装fcit…

浅谈Windows下SVN在Android Studio中的配置、基本使用及解除关联

看到网上很多关于svn环境配置和关联Android-Studio的很多博文&#xff0c;发现很零散&#xff0c;想集大家所长整理一下&#xff1a; 在AndroidStudio中开发版本控制中&#xff0c;除了Git就是SVN&#xff0c;和Eclipse不同Android Studio没有提供单独的插件&#xff0c;只能和…

四. 基于环视Camera的BEV感知算法-BEVDepth

目录 前言0. 简述1. 算法动机&开创性思路2. 主体结构3. 损失函数4. 性能对比总结下载链接参考 前言 自动驾驶之心推出的《国内首个BVE感知全栈系列学习教程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习下课程第四章——基于环视Cam…

【腾讯Bugly干货分享】Android Patch 方案与持续交付

本文来自于腾讯bugly开发者社区&#xff0c;非经作者同意&#xff0c;请勿转载&#xff0c;原文地址&#xff1a;http://dev.qq.com/topic/57a31921ac3a1fb613dd40f3 Android 不仅系统版本众多&#xff0c;机型众多&#xff0c;而且各个市场都各有各的政策和审核速度&#xff0…

App Engine中的Google Services身份验证,第1部分

这篇文章将说明如何构建一个简单的Google App Engine&#xff08;GAE&#xff09;Java应用程序&#xff0c;该应用程序可针对Google进行身份验证&#xff0c;并利用Google的OAuth授权访问Google的API服务&#xff08;例如Google Docs&#xff09;。 此外&#xff0c;在Google已…

c语言中空格的作用是什么,C语言中空格和\0的区别

\0 为字符串结束符&#xff0c;比如说&#xff1a;abcd (空格)cdefg&#xff1b;存入数组时&#xff0c;空格作为一个字符占有一个字节的空间&#xff0c;我们可以把它看着一个字符去处理。而“\0 ” 则是这个字符串的结束标识符&#xff0c;也占有一个字节的空间&#xff0c;表…

C++11 新特性:Lambda 表达式

参考文章&#xff1a;https://blogs.oracle.com/pcarlini/entry/c_1x_tidbits_lambda_expressions 或许&#xff0c;Lambda 表达式算得上是 C 11 新增特性中最激动人心的一个。这个全新的特性听起来很深奥&#xff0c;但却是很多其他语言早已提供&#xff08;比如 C#&#xff0…

山东自考c语言程序设计停考了吗,2018山东自考停考专业有哪些

自考每年都会停考一批的专业以适应社会的发展&#xff0c;今年山东自考的停考专业有哪些&#xff1f;本文由学梯网小编整理发布&#xff0c;仅供参考。2018年山东自考停考专业有什么根据山东省教育考试院发布的《关于山东自学考试停考国际贸易(专科)等19个专业的通知》知悉&…

公开调用私有Java方法?

我们是Java开发人员&#xff0c;在Java中已知4种访问修饰符&#xff1a;私有&#xff0c;受保护&#xff0c;公共和包。 好吧&#xff0c;除了私有外&#xff0c;最后三个可以通过继承&#xff0c;相同的包或实例从类外部调用。 现在&#xff0c;常见的问题是&#xff0c;可以公…

Java 异常处理 try catch finally throws throw 的使用和解读(一)

最近的一个内部表决系统开发过程中&#xff0c;发现对异常处理还存在一些模棱两可的地方&#xff0c;所以想着整理一下主要涉及到&#xff1a;1.try catch finally throws throw 的使用和解读2.自定义异常的使用3.常见的运行异常 /** * Java 异常处理 * try catch finally thr…

C语言字符像素,返回字符串宽度 (以像素为单位)

[c]代码库#include #include #include #include int main(void){/* request auto detection */int gdriver DETECT, gmode, errorcode;int x 0, y 0;int i;char msg[80];/* initialize graphics and local variables */initgraph(&gdriver, &gmode, "");/…

Spring动态物业管理

静态和动态属性对于运营管理以及在生产级别更改系统行为都非常重要。 特别地&#xff0c;动态参数减少了服务中断。 本文展示了如何使用Quartz在Spring Applications中管理动态属性。 有关使用 Spring和Quartz集成提供“ 使用Spring和Quartz的多作业计划服务”的文章。 让我们看…

[BZOJ1005][HNOI2008]明明的烦恼

[BZOJ1005][HNOI2008]明明的烦恼 试题描述 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? 输入 第一行为N(0 < N < 1000),接下来N行,第i1行给出第i个节点的度数Di,如…

android调用so封装jni,GitHub - Michelle0716/AndroidJniDemo1: 安卓对c进行so文件打包,并以jni的形式进行调用...

AndroidJniDemo1安卓对c进行so文件打包&#xff0c;并以jni的形式进行调用项目中的部分app &#xff1a; 编译so文件jniDemo: 添加运行so文件开发环境&#xff1a;android studio 3.0.1(As3.0以上创建项目&#xff0c;选择支持c/c,项目会自动生成需要的配置&#xff0c;不需要在…

ADF任务流:页面片段的托管bean范围

介绍 当我们使用ADF任务流并需要实现一些特定于流的业务逻辑或存储一些与该流相关的信息时&#xff0c;我们通常使用pageFlowScope托管bean。 而且&#xff0c;当我们需要为流的活动&#xff08;页面或页面片段&#xff09;提供服务时&#xff0c;我们将较短的作用域用于此类托…

Linux平台下:块设备、裸设备、ASMlib、Udev相关关系

对磁盘设备&#xff08;裸分区&#xff09;的访问方式分为两种&#xff1a;1.字符方式访问&#xff08;裸设备&#xff09;&#xff1b;2.块方式访问 Solaris平台 : 在Solaris平台下&#xff0c;系统同时提供对磁盘设备的字符、块方式访问。每个磁盘有两个设备文件名: 一个在/d…