LinuxShell编程

本文详细介绍了Linux Shell的概念,作为命令解释器的角色,以及如何查看系统中的不同Shell。此外,文章探讨了Shell脚本编程,包括变量、环境变量、特殊变量、预定义变量的用法,还讲解了函数、循环、条件控制结构以及脚本调试技巧。通过实例演示了如何在Shell脚本中使用变量、运算、字符串和数组,帮助读者掌握Shell编程规范。
摘要由CSDN通过智能技术生成

Shell编程

Shell的概念介绍

命令解释器

Shell是命令解释器(command interpreter),是Unix操作系统的用户接口,程序从用户接口得到输入信息,shell将用户程序及其输入翻译成操作系统内核(kernel)能够识别的指令,并且操作系统内核执行完将返回的输出通过shell再呈现给用户,下图所示用户、shell和操作系统的关系:

image-20210411153245838

一个系统可以存在多个shell,可以通过cat /etc/shells命令查看系统中安装的shell。

[root@qianfeng01 ~]# cat /etc/shells

/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
复制代码

操作系统内核(kernel)与shell是独立的套件,而且都可被替换;不同的操作系统使用不同的shell; 同一个kernel之上可以使用不同的shell。 也可以查看当前shell环境是哪种:

[root@qianfeng01 ~]# echo $SHELL
复制代码

Shell脚本

Shell也是一门编程语言,即shell脚本。在此脚本中,我们可以使用一些编程语法来进行一些任务操作。 如:变量、类型、分支结构、循环结构、数组、函数等语法。 在shell脚本里,必须指定一种shell命令解释器。

Shell编程规范

脚本文件的结构

1 文件的扩展名必须是.sh
2 文件的首行必须使用#!       指定script的运行shell环境(即脚本解释器)
   如:#!/bin/bash
3 脚本里的行注释符号为#
4 指令、选项、参数之间即使有多个空格仍会被视为一个空格。
5 tab键形成的空白也被视为一个空格键
6 空白行会被忽略
复制代码

脚本文件的执行

  • 使用bash程序调用执行,只需要有读权限即可

    [root@qianfeng01 ~]# sh *.sh      
    或者
    [root@qianfeng01 ~]# bash *.sh
    复制代码
  • 直接写script,必须要有rx权限才行

    [root@qianfeng01 ~]# ./*.sh         
    绝对路径写法: /hadoop/*.sh
    相对路径写法: ./*.sh
    复制代码
  • 借助变量PATH功能

    将*.sh放入~/bin目录下,因为PATH里拼接了~/bin目录。
    注意:~/bin目录必须自行创建
    复制代码

Shell的变量

变量的用法

1. 变量的命名规则   
   - 命名只能使用英文字母,数字和下划线。首个字符不能以数字开头。
   - 字母习惯使用大写。
   - 中间不能有空格。
   - 不能使用标点符号。
   - 不能使用bash里的关键字(可用help命令查看保留关键字)

2. 变量的使用规则
   - 直接定义变量名称,没有类型需要强调(类似于数学中:x=1,y=2,z=x+y)
   - 赋值时,"="前后不能有空格
   - 命令的执行结果赋值给变量时,使用反单引号      如:TIME=`date`
   - 调用变量时,必须使用$       格式: $变量名    或    ${变量名}
复制代码

变量的分类

Linux Shell中的变量可以分为三种变量: 局部变量环境变量特殊变量。可以通过set命令查看系统中存在的所有变量

局部变量:也就是用户自定义的变量,在脚本中或命令中定义
环境变量:保存和系统操作环境相关的数据。$HOME、$PWD、$SHELL、$USER等等
特殊变量:
    一种是位置参数变量:主要用来向脚本中传递参数或数据,变量名不能自定义,变量作用固定。
    一种是预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
复制代码

局部变量

用户自定义的变量由字母或下划线开头,由字母,数字或下划线序列组成,并且大小写字母意义不同,变量名长度没有限制。

  • 定义变量

    习惯上用大写字母来命名变量。变量名以字母表示的字符开头,不能用数字。
    复制代码
  • 调用变量

    在使用变量时,要在变量名前加上前缀“$”.
    使用echo 命令查看变量值
    eg: [root@qianfeng01 ~]# echo $A
    复制代码
  • 变量赋值

    • 第一种: 定义时赋值

      # 变量=值
      # 注意: 在上述的定义方式中,等号的左右两侧不能有空格
      # eg:
      [root@qianfeng01 ~]# STR="hello qianfeng"
      [root@qianfeng01 ~]# A=9
      复制代码
    • 第二种: 将一个命令的执行结果给变量赋值

      [root@qianfeng01 ~]# A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量A
      [root@qianfeng01 ~]# A=$(ls -la) 等价于反引号
      [root@qianfe
本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对模式 5 1.4.4 chmod命令的其他例子 6 1.4.5 可以选择使用符号模式或绝对模式 7 1.5 目录 7 1.6 suid/guid 7 1.6.1 为什么要使用suid/guid 8 1.6.2 设置suid/guid的例子 8 1.7 chown和chgrp 9 1.7.1 chown举例 9 1.7.2 chgrp举例 9 1.7.3 找出你所属于的用户组 9 1.7.4 找出其他用户所属于的组 10 1.8 umask 10 1.8.1 如何计算umask值 10 1.8.2 常用的umask值 11 1.9 符号链接 12 1.9.1 使用软链接来保存文件的多个映像 12 1.9.2 符号链接举例 12 1.10 小结 13 第2章 使用find和xargs 14 2.1 find命令选项 14 2.1.1 使用name选项 15 2.1.2 使用perm选项 16 2.1.3 忽略某个目录 16 2.1.4 使用user和nouser选项 16 2.1.5 使用group和nogroup选项 16 2.1.6 按照更改时间查找文件 17 2.1.7 查找比某个文件新或旧的文件 17 2.1.8 使用type选项 17 2.1.9 使用size选项 18 2.1.10 使用depth选项 18 2.1.11 使用mount选项 18 2.1.12 使用cpio选项 18 2.1.13 使用exec或ok来执行shell命令 19 2.1.14 find命令的例子 20 2.2 xargs 20 2.3 小结 21 第3章 后台执行命令 22 3.1 cron和crontab 22 3.1.1 crontab的域 22 3.1.2 crontab条目举例 23 3.1.3 crontab命令选项 23 3.1.4 创建一个新的crontab文件 24 3.1.5 列出crontab文件 24 3.1.6 编辑crontab文件 24 3.1.7 删除crontab文件 25 3.1.8 恢复丢失的crontab文件 25 3.2 at命令 25 3.2.1 使用at命令提交命令或脚本 26 3.2.2 列出所提交的作业 27 3.2.3 清除一个作业 27 3.3 &命令 27 3.3.1 向后台提交命令 28 3.3.2 用ps命令查看进程 28 3.3.3 杀死后台进程 28 3.4 nohup命令 29 3.4.1 使用nohup命令提交作业 29 3.4.2 一次提交几个作业 29 3.5 小结 30 第4章 文件名置换 31 4.1 使用* 31 4.2 使用? 32 4.3 使用[...]和[!...] 32 4.4 小结 33 第5章 shell输入与输出 34 5.1 echo 34 5.2 read 35 5.3 cat 37 5.4 管道 38 5.5 tee 39 5.6 标准输入、输出和错误 40 5.6.1 标准输入 40 5.6.2 标准输出 40 5.6.3 标准错误 40 5.7 文件重定向 40 5.7.1 重定向标准输出 41 5.7.2 重定向标准输入 42 5.7.3 重定向标准错误 42 5.8 结合使用标准输出和标准错误 43 5.9 合并标准输出和标准错误 43 5.10 exec 44 5.11 使用文件描述符 44 5.12 小结 45 ... ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值