快速了解shell编程语言,及shell脚本编写使用(1)

5 篇文章 0 订阅
5 篇文章 2 订阅

shell脚本编程(1) ——shell的基本概念

各位博客们大家好啊!这是我个人的第二篇博客,写的不好的地方,希望大家多多指点,本偏文章主要是介绍shell脚本的一个基础,让大家能够了解到shell这款编程语言(* ^ - ^ *)

一、shell的概述

1、什么是shell
  • Shell中文翻译为贝壳,即相当于操作系统的外壳
  • Shell是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。
  • Shell 既是一种命令语言,又是一种程序设计语言
  • 负责向内核翻译及传达用户程序指令
    在这里插入图片描述
2、shell的使用方式
  • 交互式(命令行):人工干预、智能化程度高、逐条解释执行、效率低
  • 非交互式(脚本):提前编写、智能化难度大、批量执行、效率高、方便后台执行
3、常见的shell程序种类
  • /bin/bash 、/bin/sh 、/sbin/nologin 、/bin/tach 、/bin/ksh
4、bash的基本特性
  • 快捷键、tab键补齐、命令历史、命令别名、重定向、管道……

二、shell脚本编辑及执行

1、什么是shell脚本
  • 提前写好可执行的shell命令语句,能够完成特定的任务文件
  • 优点:可顺序、批量化处理,解释型程序
  • 简单脚本编写的“四步走”:
    ① 新编辑文本文件 vim /mnt/first.sh
    ② 编写脚本语句 echo ‘Hello world’
    ③ 添加X执行权限 chmod +x /mnt/first.sh
    ④ 绝对路径执行 /mnt/first.sh
2、脚本构成及执行方式
  • 规范的脚本构成(三要素)

    ①脚本声明(使用哪种解释器)			        #!/bin/bash 
    ②注释信息(步骤、思路、用途、变量含义等)     #输出Hello world
    ③可执行的语句				            	echo ‘Hello world’	
    
  • 脚本的执行方式
    ①方式一:作为“命令字”(指定脚本的文件路径,前提是有X权限)
    ②方式二:作为“参数”(bash 脚本文件路径,前面加解释器名,不需要X权限)

三、shell变量

1、变量的概述
  • 什么是变量

     -以固定名称存放,可能会变化的值(以不变名称储存可以变化的值)
     -提高脚本对任务的需求、运行环境变化的适应能力
     -方便在脚本中重复使用
    
  • 定义/赋值/查看/取消变量

      -	定义/赋值变量:    变量名=变量值、X=12
      -	查看变量:         echo $变量名、echo${变量名}
      -	查看所有的变量:    set
      -	查看常用的环境变量: env
      -	手动取消变量:      unset 变量名 、变量名=空
    
  • 定义变量注意事项

    - 若指定的变量名已存在,相当于为此变量重新赋值
    - 等号两边不要有空格
    - 变量名由字母/数字/下划线组成,区分大小写
    - 变量名不能以数字开头,不要使用关键字和特殊字符
    
2、变量的种类
  • 环境变量

    - 变量名一般都大写,用来设置用户/系统环境,由系统定义赋值完成
    - 常见的环境变量:HOSTNAME主机名、USER用户名、UID用户的id号、SHELL用户使用的解释器、PWD当前所在路径、PS1一级提示符、PS2二级提示符  HOME家目录PATH存储命令的路径
    
  • 位置变量

    在执行脚本时提供的命令行参数
    $n,(n为序号 $1、$2....${10}、${11}...
    
  • 自定义变量

    用来保存脚本程序的执行信息
    直接使用这些变量、不能直接为这些变量赋值
    $# 已经加载的位置变量(参数)的个数
    $? 程序退出后的状态值,0表示正常,其他值表示异常
    $$当前运行进程的PID号
    $*所有位置变量的值
    $0当前所在进程或脚本名
    
3、变量值及范围控制
  • shell中三种定界符

    - 双引号 ” ”      允许扩展,以$引用其他变量
    - 单引号 ’ ’      禁止扩展,即便$也视为普通字符(可以屏蔽特殊符号)
    - 反撇号 ` `  	 将命令的执行结果作为变量值、或使用$( )
    
  • 屏蔽敲键盘的时候显示信息

    - ssty  -echo   屏蔽回显
    - stty  echi    恢复回显
    
  • 发布全局变量(进入子进程也是可以显示该变量)

    - export  		发布或者创建全局变量
    - export -n 		取消全局变量
    
  • 交互式输入变量值(从用户获取变量的值)

    - read  -p  "加提示信息"
    

四、shell中数值运输

1、整数运算
  • 基本运算类别,四则运算、取余运算

    加法:num1 + num2
    减法:num1 - num2
    乘法:num1 * num2
    除法:num1 / num2
    求模:num1 % num2
    
  • expr运算工具 (运算符两边要有空格,乘法需要\转义*的特殊含义)

    格式: expr 整数1 运算符 整数2 ...
    
类型运算符示例
加法+expr 42 + 33
减法-expr 42 - 33
乘法\*expr 42 \ * 33
除法/expr 42 / 33
取余%expr 42 % 33
  • $[ ]、$(( ))算式替换运算

    - 格式:$[ 整数1  运算符 整数符]
    - 乘法操作*无需转义,运算符两侧可以无空格           如:x=10
    - 引用变量可省略$符号                            echo $[x+1]  或者  echo $((x*21))
    - 计算结果替换表达式本身,可结合echo命令输出        结果分别为:11和210
    
  • 变量的自增/减等操作

    - 使用$[]替换,或者let命令来完成,结合echo命令查看结果
    - let  不显示运算结果,通常用于创建或修改变量
    - 使用let创建变量:let a=10+10  创建变量a,值是20
    

    在这里插入图片描述

2、小数运算
  • 使用bc实现小数运算

    - 多数Linux系统默认安装此工具
    - 支持高精度的数值运算
    - 直接运行bc可进入交互式运算界面, quit退出
    - 设置scale=n可约束小数位
    
[root@svr5 ~]\# bc			//直接命令行执行bc打开bcit算器程序
12.23*10.22					    //提交表达式即输出结果
124.99							//默认输出结果为两位小数

scale=4							//将可用的小数显示为4位
12.23*10.22					    //提交表达式即输出结果
124.9906
  • 结合管道向bc发送表达式

    - 多个表达式以分号分隔
    - 通过echo命令+管道传递要计算的表达式
    
[root@svr5 ~]\# A=12.34
[root@svr5 ~]\# echo "$A*56.789" | bc                    //单表达式
700.7 76
[root@svr5 ~]\# echo "scale=4; $A*56.789;5/3" | bc       //多表达式
700.7 762
1.6666
  • 小数值的比较

    - echo "数值1比较符数值2"| bc
    - 如果表达式成立,则返回的计算结果为1 ,否则返回0
    - 常见比较操作: >、>=、<、<=、= =、!=
    
[root@svr5 ~]\# A=12.34 ; B=56.78
[root@svr5 ~]\# echo "$A<= $B" | bc            //A是否小于或等于B
1
[root@svr5 ~]\# echo "$A>$B" | bc              //A是否大于或等于B
0

五、条件测试

1、test测试
  • 语法格式

    test   选项    参数
           [ 选项  参数 ]
    help test   #查阅帮助
    
2、常见的测试操作
  • 字符串比较
操作符含义举例
==是否相等[ a == b ]
!=是否不相等[ a != b ]
-z判断变量是否为空a=[ -z $a ]
!-z判断变量是否非a=[ ! -z $a ]

使用echo $?检查结果

  • 比较整数值的大小
操作符含义举例
-eq等于(Equal)[ x -eq 100 ]
-ne不等于(Not Equal)[ x -ne 100 ]
-ge大于或等于(Greater or Equal)[ x -ge 100 ]
-le小于或等于(Lesser or Equal)[ x -le 100 ]
-gt大于(Greater)[ x -gt 100 ]
-lt小于(Lesser)[ x -lt 100 ]
  • 文件状态测试
操作符含义举例
-e判断对象是否存在( Exist),若存在则结果为真[ x -e /mnt ]
-d判断对象是否为目录( Directory), 是则为真[ x -d /mnt ]
-f判断对象是否为一般文件( File), 是则为真[ x -f /etc/passwd ]
-r判断对象是否有可读( Read )权限,是则为真[ x -r /mnt ]
-w判断对象是否有可写( Write )权限,是则为真[ x -w /mnt ]
-x对象是否有可执行( eXcute )权限,是则为真[ x -x /mnt ]
3、组合多个条件
  • 一个逻辑分隔判断
操作符含义举例备注
&&之前任务成功就执行之后任务ls && ls 前一个ls执行成功了,又执行了第二个ls,共执行2次ls给定条件必须都成立,整个测试结果才为真
||之前任务失败才执行之后任务ls || ls 前一个ls执行成功了,不执行第二个ls,共执行1次ls只要其中一个条件成立,则整个测试结果为真
  • 多个逻辑符号组合判断
操作符含义举例
&&前后任务都成功,算该组成功ls && ls && ls 、 ls && ls || ls
||前后任务有一个成功,就算该组成功ls || ls || ls 、 ls || ls && ls

解析:

ls && ls && ls   //第1个ls成功,执行第2个, 前2个都成功,执行第3个
ls && ls || ls   //第1个ls成功,执行第2个,前2个都成功,不执行第3个
ls || ls || ls   //第1个ls成功,不执行第2个,前2个算成功,不执行第3个
ls || ls && ls   //第1个ls成功,不执行第2个,前2个算成功,执行第3个

[ root == $USER ] && echo "我是管理员" || echo "我不是管理员"    //输出我是管理员

结束啦
这篇的基本介绍就先写到这里,后面会继续更新shell脚本的一些常用的用法以及后面企业中一些实用的shell脚本的运用,感谢你们的浏览,也希望对你们有所帮助,你的点赞是我努力的动力,谢谢你们!

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值