Fanxin's blog Fanxin's blog
首页
  • 建站选择
  • 博客建站
  • 博客写作
  • Java重难点知识
  • 常用框架

    • Spring-boot
  • Hadoop
  • Linux学习巩固
  • Shell学习巩固
  • 爬虫技术
  • 博客
  • 公众号
  • 视频UP主
  • 实用工具
  • 生活感悟
  • 好文摘录
  • 优秀开源
  • Oracle APEX
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Fan Xin

自媒体程序员养成记
首页
  • 建站选择
  • 博客建站
  • 博客写作
  • Java重难点知识
  • 常用框架

    • Spring-boot
  • Hadoop
  • Linux学习巩固
  • Shell学习巩固
  • 爬虫技术
  • 博客
  • 公众号
  • 视频UP主
  • 实用工具
  • 生活感悟
  • 好文摘录
  • 优秀开源
  • Oracle APEX
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Linux学习巩固

  • Shell学习巩固

    • Shell简介
    • Shell编程基础
      • 变量
        • 1、局部变量
        • 2、环境变量
        • 3、变量命名
        • 4、变量的赋值和取值
        • 5、取消变量
        • 6、特殊变量
        • 7、数组(重点)
    • 测试和判断
    • 循环
    • 函数
    • 重定向
    • 监测某文件夹下文件的更新并自动推送Hadoop集群
  • Linux、Shell
  • Shell学习巩固
Fanxin
2021-03-23

Shell编程基础

一个脚本必然需要通过很多手段操控它的运行,而无论什么操控手段,都离不开变量。从变量的实质来说,变量名是指向一片用于存储数据的内存空间。Shell语法的变量有几个特点:

  • 弱类型
  • 无需事先声明

# 变量

# 1、局部变量

只在某个Shell中生效的变量,随着当前Shell的消失而消失,可以使用local内建命令来“显式”的声明局部变量,但仅限于函数内使用。

# 2、环境变量

环境变量,又称“全局变量”。可以使用export内建命令将其导出为环境变量。环境变量在当前环境和子Shell环境中生效,“传子不传父”。

[root@fanxin sbin] export VAR=value //将当前变量VAR导出为环境变量,所以其子shell、孙子shell都可以使用VAR的值
1

# 3、变量命名

强制规定:

  • 以字母或者下划线开头
  • 后面可以跟数字、字母和下划线
  • 变量长度无限制
  • 严格区分大小写

以下非必须,程序员的自我修养:

  • 见名知意
  • 增加一些清晰明了的注释

# 4、变量的赋值和取值

定义变量:变量名=变量值

注意事项:

1、等号两侧不能有空格;

2、变量值中有空格时要用引号括起 ==> eg: name="Xin Fan"

变量取值:$变量名

注意事项:

1、使用${变量名} 的取值方法最保险

2、变量引用其它变量,必须使用双引号,单引号会阻止Shell解释特殊字符$

3、使用 shopt -s -o nounset ,设置脚本遵循”先声明后使用“原则,防止不正当引用未声明变量但是没有错误提示。

# 5、取消变量

取消变量:unset 变量名||函数名

将变量或者函数从内存中释放。

# 6、特殊变量

  • 位置参数

$0:脚本名本身。$1、$2……${10}:脚本的第一个参数、第二个参数……第十个参数。

$#:变量总数。

$*、$@:显示所有参数。

$?:前一个命令的退出的返回值。

$!:最后一个后台进程的ID号。

  • 脚本或命令返回值:$?

Linux中规定正常退出的命令和脚本应该以0作为其返回值,任何非0的返回值都表示命令未正确退出或未正常执行。

[root@fanxin sbin]# ifconfi    //故意输入错误的指令
-bash: ifconfi: 未找到命令
[root@fanxin sbin]# echo $?    //使用 $? 查看命令的返回值
127                            //返回值不为0,说明命令未正常执行

## ---------使用正确的命令------------

[root@fanxin sbin]# ping github.com -c 1
PING github.com (13.250.177.223) 56(84) bytes of data.
64 bytes from ec2-13-250-177-223.ap-southeast-1.compute.amazonaws.com (13.250.177.223): icmp_seq=1 ttl=40 time=160 ms

--- github.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 160.787/160.787/160.787/0.000 ms
[root@fanxin sbin]# echo $?     //使用 $? 查看命令的返回值
0                               //返回值为0,说明命令正常执行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 7、数组(重点)

  • 数组的定义

声明方式: declare-a 数组名 //通过 declare 关键字来声明一个数组

赋值方式: 数组名[0]=值 //通过数组名[下标从0开始]的形式进行赋值

声明+赋值: 数组名=('值1','值2','值3') //不适用declare关键字,创建数组并直接赋值

  • 数组操作
数组取值 数组长度 数组截取 连接数组 替换元素 取消数组
${数组名[索引]} ${#数组名[@或*]} ${数组名[@]:1:2} (${数组1[@]} ${数组2[@]}) (${数组[@]/a/b}) unset 数组名||数组[索引]
编辑 (opens new window)
#Shell#脚本
上次更新: 2021/06/16, 01:26:04
Shell简介
测试和判断

← Shell简介 测试和判断→

最近更新
01
虚拟机中Ubuntu网卡配置
06-04
02
监测某文件夹下文件的更新并自动推送Hadoop集群
06-03
03
Vim快捷方式整理
05-24
更多文章>
Theme by Vdoing | Copyright © 2021-2021 Fan Xin | Github repo
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式