shell脚本学习

0、脚本文件结构

#!/bin/bash -v 让bash脚本执行时输出命令

1、文本表示

脚本中的文本表示方式有三种(我是说目前我会的,我是小白):

  • 双引号:可以包含文本、变量、转义字符
  • 单引号:不管里边写什么都会被看做字符本身
  • 反引号(就是键盘左上角那个很少被用到的~那个键):包含命令,会将命令的返回值赋给左侧变量。

然后没有被包裹的文本或表达式通常是省略了双引号,例如B=${A}其实是B="${A}"省略了双引号。

ps: echo打印包括转义字符的文本时需要-e参数,经试验,单引号也可

2、read

read -p "提示语" "变量名"
其他可用参数:
-s 关闭回显(密码)

3、变量的作用范围

  • shell的命名空间没有继承关系,子shell不享用父shell的命名空间
  • 默认局部变量
  • export x 将x变量发布为全局变量
  • export -n x取消该变量的全局属性

4、脚本中外部数据(我起的名字)的获取

主要是获取当前进程的执行名字、参数、PID、shell使用选项等数据,示例如下,vi test 创建脚本后写入

echo $0"--这个程式的执行名字"
echo $2"--这个程式的第n个参数值,n=1..9"
echo $*"--这个程式的所有参数,此选项参数可超过9个。"
echo $#"--这个程式的参数个数"
echo $$"--这个程式的PID(脚本运行的当前进程ID号)" &
echo $!"--执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)"
echo $?"--执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)"
echo $-"--显示shell使用的当前选项,与set命令功能相同"
echo $@"--跟$*类似,但是可以当作数组用"

使用带参数的方式执行该脚本

sh test 11 22 33

输出结果:

test--这个程式的执行名字
22--这个程式的第n个参数值,n=1..9
11 22 33--这个程式的所有参数,此选项参数可超过9个。
3--这个程式的参数个数
14143--执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)
14142--这个程式的PID(脚本运行的当前进程ID号)
0--执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
hB--显示shell使用的当前选项,与set命令功能相同
11 22 33--跟11 22 33类似,但是可以当作数组用

ps:第五行的14143输出的是第五行echo的背景进程的PID,这也是脚本中第五行使用&的目的,也可以看到由于&后台执行导致第五行和第六行执行顺序颠倒了

5、用于判断的逻辑测试

格式:

! [ 表达式 符号 表达式 ]

注意大括号和符号前后均应有一个空格。
其中表达式可用上述变量,符号可用:
eq 【等于】
-ne 【不等于】
-gt 【大于】
-ge 【大于等于】
-lt 【小于】
-le 【小于等于】

结合第4点,即可使用 if [ "$#" -eq "2" ];then 判断脚本输入参数数量是否为2个

emm:零零碎碎

  • 提前结束脚本 exit
  • 左移n位 shift n
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • # 一、shell基础1 ## 1.shell是什么 - Shell是一个命令行解释器,它为用户提供 了一个向Li...
    如果我是阅读 380评论 0 0
  • shell脚本编程 shell脚本 协程,协程可以同时做两件事。它在后台生成一个子shell,并在这个子shell...
    Ileo_km阅读 307评论 0 0
  • [TOC] 简介: Shell 是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言...
    黄海滨_x阅读 886评论 0 2
  • 变量 变量定义 Shell 支持以下三种定义变量的方式: variable 是变量名,value 是赋给变量的值。...
    rill_阅读 307评论 0 0
  • 学习shell脚本前先对linux的基本常用知识点介绍一下。 linux系统介绍linux由四个部分组成,分别是l...
    涤除而玄览阅读 353评论 0 0