shell 脚本学习之一 ------let,echo,变量

2023-11-16

首先看到好多以这样开头的    #!/bin/bash   这个是告诉系统 解释此脚本文件的Shell程序
# 这个是注释行,当行有效
脚本程序一般用 xx.sh 文件表示,这样一样就可以看出文件的属性,当然也可以不这样
一个脚本程序写完后,如果要执行它,则必须先赋+x  执行权限给它 
例如:chmod +x xx.sh,然后用命令 ./filename  执行
 以下是一些知识点:
1. echo :用于显示(不带参数,如果有多行则换行输出)   例如:echo  "hello shell"  
    如果加上参数 -n  表示如果有多行的话,将不换行输出
    点击(此处)折叠或打开

  1. #!/bin/bash
  2. # filename is while.sh
  3. count=0
  4. while(($count < 5 ))
  5. do
  6. echo -n " count=" $count
  7. let count=count+1
  8. done
       顺便说一句,linux提供2中命令:一种是内部命令,一种是外部命令。解释执行内部命令要比外面命令快的   多, 同时,解释内部命令时候,shell不需要创建子进程,而外部命令则需要创建子进程,这就增大了系统的开销。查看是不是内部命令,可以用如下命令:type  command   例如:type echo
2.
 $xx   表示引用变量:如上面的代码中,第三行定义了变量count, 第四行,第六行 $count  则引用该变量。
3. 位置
变量   : $0 文件名,$1 第一个参数 $2 第二个参数

   点击(此处)折叠或打开

  1. #!/bin/bash
  2. #filename is first.sh
  3. #have 3 parameter to first.sh
  4. #command is: ./first.sh 1 2 3
  5. # $#:传入脚本的参数个数
  6. # $*:显示所以的参数,并以空格隔开
  7. # $0:命令本身,即要执行的文件名
  8. # $1:第一个参数
  9. # $2:第二个参数
  10. # $3:第三个参数 后面一样 ~等等

  11. echo "number of vars:"$#
  12. echo "var of vars:"$0
  13. echo "first var:"$1
  14. echo "second var:$2
  15. echo "third var:$3
4.  let  :用来执行算数运算和数值表达式测试。
    let 命令的替代表示形式是: ((算术表达式)) ,这样做的好处是如果表达式中含有特殊的字符,可以告示shell 进行特殊处理:例如,let ″val=a|b″。如果不括起来,Shell会把命令行let val=a|b中的“|”看成管道符,将其左右两边看成不同的命令,因而无法正确执行。
    以下代码执行结果为:1 3 7 10

点击(此处)折叠或打开

  1. #!/bin/bash
  2. #filename is let.sh

  3. i=1
  4. echo "i="$i
  5. let i=i+2
  6. echo "i="$i
  7. let "i=i+4"
  8. echo "i="$i
  9. ((i+=3))
  10. echo "i="$i
5.  函数调用 :声明函数 function name(){~~~~},函数的调用,直接写函数名称name即可。

点击(此处)折叠或打开

  1. #!/bin/bash
  2. # filename is second.sh
  3. # 函数申明和调用
  4. function fun1(){
  5. local a="hello world"
  6. echo "函数调用成功 "$a
  7. }
  8. echo "函数调用前"
  9. fun1
  10. echo "函数调用结束"
6.  Shell中的变量种类:局部变量和全局变量
         局部变量 是在函数中用local 声明的变量:他的作用域是在函数调用开始到函数结束。
        全局变量 在shell脚本下声明的变量,他的作用域是整个shell的生存周期内。shell结束,全局变量的周期也结束。

点击(此处)折叠或打开

  1. #!/bin/bash
  2. #filename is localvar.sh
  3. var1="hello shell"
  4. function fun(){
  5. #定义局部变量
  6. local var2="hello local variable"
  7. echo "在函数中 使用局部变量 var2="$var2
  8. echo "调用全局变量1  var1="$var1
  9. }

  10. fun
  11. echo "在函数外调用 局部变量 var2="$var2
  12. 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 表示正常



from:  http://m.blog.chinaunix.net/uid-26827001-id-3154024.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

shell 脚本学习之一 ------let,echo,变量 的相关文章

  • Redis事务、持久化、发布订阅

    文章目录 Redis事务 Redis持久化 RDB Redis DataBase 快照方式 AOF Append Only File 日志形式 Redis发布订阅 发布订阅模型 实例 Redis发布订阅命令 原理 Redis事务 Redis

随机推荐

  • flutter 字符串的常用属性及方法

    1 字符串长度 var str 字符串的长度 print 打印 str length 打印 6 var str1 hello dart print 打印 str1 length 打印 10 2 是否为空 str isEmpty为空true
  • 关于ElasticSearch的Update By Query的那些著名的坑

    提起es的Update By Query很多人一定也不陌生 它对应的就是关系型数据库的update set where 语句 这对应一般的存储引擎而言算是最基本的功能 但它的坑确不少 多到让你使用起来很奔溃 比如批量更新时非事务模式执行 允
  • selenium自动化测试的问题解决及优化

    目录 一 安装出现的问题 1 webdriver has no attribute find element by id 2 gecodriver needs to be in PATH 3 安装了selenium报错has no attr
  • io第一天

    ubuntu ubuntu day1 c cat 8 c include
  • PL/SQL 导入SQL文件时报“Error reading file”

    从另一台机器上导出了一个表的数据 有2万多条 导出的sql文件大小将近40M 之后使用PL SQL的Command Window窗口执行sql文件 执行命令是 SQL文件全路径 提示错误 Error reading file不知道是不是因为
  • 在Ubuntu中安装中文输入法

    文章目录 前言 基础准备 ibus Intelligent Input Bus fcitx Flexible Input Method Framework 前言 Ubuntu中安装中文输入法相比Windows上要复杂不少 其实也不算复杂 就
  • js实现一个表单输入验证,重复字符验证

    logon password check 加班到现在 还是得发个 csdn 本文主要通过一个案例介绍两个东西 正则表达式中 必须含有某类字符的时候对应的 正则写法 在我之前的正则文章中已经写过了 重复字符以及连续字符的判断方式 正则来表示验
  • JavaScript window.location对象

    http www cnblogs com ljan archive 2012 02 27 2369960 html location 地址对象 它描述的是某一个窗口对象所打开的地址 要表示当前窗口的地址 只需要使用 location 就行了
  • nodejs html引用js_nodejs做出最简单的网页服务端。【501】

    一 先去官网下载nodejs 按自己的系统一步一步操作 基本很简单 这里就不多介绍了 二 安装完成后 通过cmd验证是否安装成功 输入node v可以查看版本号 三 用开发工具创建一个js文件 命名为server js 四 开始写js文件
  • Hadoop环境搭建及常见问题解决(保姆级教程)

    Hadoop环境搭建及常见问题解决 零 资源准备 一 环境准备 1 安装虚拟机 2 环境准备 1 创建新用户xiaobai 2 安装ssh server 3 上传相关资源 4 使用putty连接服务器 5 设置主机名 6 检查和关闭防火墙
  • windows信息收集自动化脚本

    import os encoding utf 8 class information collecting object def init self self system info commands windows版本信息 n ver w
  • prbs码

    prbs7 111110110011100001101010010001011111110000001000001100001010001111001000101100111010100111110100001110001001001101
  • .Net传值方式主要有以下几种

    1 url传值 如 CheckPwd aspx user uservalue pwd pwdvalue 2 Session传值 如 Session role Administrator 3 Viewstate role Administra
  • Selenium+PhantomJS使用时报错原因及解决方案

    问题 今天在使用selenium PhantomJS动态抓取网页时 出现如下报错信息 UserWarning Selenium support for PhantomJS has been deprecated please use hea
  • 异常处理UncaughtExceptionHandler

    自动捕获未知异常的主要思路是 在Application注册一个实现了UncaughtExceptionHandler的对象 然后在该对象中调用方法Thread setDefaultUncaughtExceptionHandler设置未知异常
  • [一步一步学react系列] 03—计数器V1.0

    前言 在上文中我们学习了react的工作流程 知道了用户点击操作先是分发action 然后reducer根据接收到的action来做具体值的改变的这个曲折过程 仔细看redux工作流的盆友一定发现了 上文中并没有用到最中心的store 那么
  • C语言基础-08 字符数组、字符串

    目录 一 定义字符数组 二 字符数组的初始化 三 字符串和字符串结束标志 四 字符数组的输入输出 五 使用字符串处理函数 1 输出字符串的函数 2 输入字符串的数组 六 数组中常用的字符串函数 1 strlen 2 strcat strnc
  • Java:注意事项集合

    回车与换行的区别 CRLF CR LF详解 r n r n的区别 https blog csdn net lishuoboy article details 84768748 java中String的格式化format 方法https bl
  • webtrc 中VideoAdapter类中的作用及局限

    需求 文章目录 需求 VideoAdapter类 分辨率的适配 帧率的适配 局限 在媒体库中 是要求能动态改变编码的分辨率和帧率的 思路是重启编码器 设置编码器新的分辨率 帧率参数来满足要求 所以输入到编码器中的视频流分辨率 帧率应该与设置
  • shell 脚本学习之一 ------let,echo,变量

    首先看到好多以这样开头的 bin bash 这个是告诉系统 解释此脚本文件的Shell程序 这个是注释行 当行有效 脚本程序一般用 xx sh 文件表示 这样一样就可以看出文件的属性 当然也可以不这样 一个脚本程序写完后 如果要执行它 则必