shell脚本的简单初识

  脚本相信大家都不陌生,平时玩游戏遇到的各种辅助软件;你可能要敲上一会的命令,大佬发给你一个文本,运行一下一秒解决。脚本确实帮助了我们很多,今天就来简单的了解一下在Linux中的一个shell脚本。

什么是shell脚本?作用,或者是好处

shell脚本简单来说就是将平时使用的指令按照顺序罗列到文本文件中,在添加一个执行权,放到一个系统能找到的位置,这就是脚本。

作用:

有了它你可以批量处理很多种重复性的操作,避免了人力失误,效率不高的问题。还有能实现免交互的运行,对于实现自动化是有帮助的。

shell脚本编写的规则与执行
  • 编写规范:一个好的脚本一定有是有辅助语句,和良好的阅读性。因为你的脚本要想让别人使用,哪些卡顿的地方要注意提前标识,以免被当作死机处理

    • 使用有意义的变量名和函数名。

    • 缩进以增加代码可读性,通常使用4个空格。

    • 每条命令后加分号,或使用换行。

    • 注释要清晰明了,使用#开头。

    • 避免使用硬编码的值,使用变量或函数代替。

    • 脚本开头指定解释器,如#!/bin/bash。不同的系统有不同的解释器,解释器本质上也是软件,下载之后就能运行对应的脚本,提高了移植性。

执行的方式:
 

  • 执行脚本的方式

    • 调用解释器

      • bash 脚本;dash  脚本;csh  脚本

    • 路径执行

      • ./脚本——绝对路径相对路径都行

        • 前提需要赋予执行权,否则无法执行

    • . 或source

      • source 脚本

        • 直接在当前shell进行

 前两种执行方式会开启一个子shell环境,会消耗一部分资源。如果开的很多,系统资源可能被耗尽,需要根据情况来决定使用哪种方式执行脚本。

还有一个经常用的重定向与管道

  • 重定向与管道

    • 重定向:

      • - 标准输入,默认设备键盘,文件编号为0  --stdin(标准输入)

      • - 标准输出,默认设备是显示器,编号为1,

      • - 标准错误。默认设备是显示器,编号为2,

      • 改变默认输出输入的方向称为重定向

      • 重定向输出:是将命令的标准输出到指定文件中,而不是显示器上,重定向输出使用”>“”>>“分别是覆盖文件和追加文件。

      • 重定向输入:是将命令接收输入的途径改为指定的文件,用”<“操作符。用该操作可避免出现交互式的使用。

        • 例:给定用户密码的免交互

        • vi pass.txt

        • 123456

        • useradd zhangsan

        • passwd --stdin zhangsan < pass.txt

      • 错误重定向:通常使用”2>”来收集错误信息。

    • 管道: 左侧为命令输出结果“|”右侧则将左侧的输出结果执行下一个命令。

    • 例cd / | ls   就是先cd到根目录在执行ls命令

 变量——脚本离不开的东西
  • 变量

    • 计算机变量的自定义:调用储存的内存——绕口,但理解后就会觉得很形象。

    • 定义变量的基本格式:

      • “变量名=变量值”等号两边没有空格,且尽量避免使用特殊字符。

      • 声明变量:用$符 如果变量名称与紧跟的字符容易混淆时需要用${}将变量圈起起到区分边界的作用。

      • ${}用于引起变量

      • $()用于引起命令能进行嵌套例:$(cd /etc) $(ls -l)

      • ``也用于引起命令与$()相同但反引号容易混淆且不能嵌套例:`cd /etc ` ls -l`

      • 不能使用特殊字符

    • 变量的命名规则

      • 变量名只能包含字母、数字和下划线

      • 变量名必须以字母或下划线开头

      • 变量名是区分大小写的

      • 变量名不能使用Shell的保留关键字

        • 保留关键字:类似于ls,cd,pwd,不能用这种方式命名变量名

      • 变量名应尽可能具有描述性

      • 避免使用空格或特殊字符

    • 定义变量的方法:

      • 用“=”号连接变量名与变量

      • read

        • 交互式的方式定义变量

          • -p 加入提示消息提醒用户操作

    • 引用变量的方法

      • “变量”

        • 双引号引起变量

        • 该方式可以调用字符串中带$的字符

          • 例:name=www echo $name www echo “my$name” mywww

      • '变量'

        • 单引号引起变量

        • 用该方式会将字符串中的$做原样输出

      • ${变量}

        • 方便清晰

      • $()

        • 只能调用命令

          • 且能嵌套

      • ··

        • 只能调用命令

          • 不能嵌套

    • 变量的作用范围

      • 全局变量

        • 文件/etc/profile

          • 在任意子shell中都生效

            • set查看

              • 修改立即生效,可执行该脚本

        • 全局变量尽量使用大写

      • 局部变量

        • 例:用户下的.bash_profile

          • 只在当前shell生效

        • 局部变量尽量使用小写

        • 用export可将局部变量导出为全局变量

        • 若在脚本中不想将变量设置为全局变量可添加local

    • 数值变量的运算

      • 数值与运算符之间必须有空格

      • expr

        • 整数运算器

          • - + 加法运算

          • - -减法运算

          • - \*乘法运算 前面要加转义符

          • - /除法运算

          • - %求模运算·(取余运算)

    • 特殊的shell变量

      • 环境变量

        • /etc/profile

      • 只读变量

        • readonly $变量

          • 不允许被重新赋值

      • 位置变量

        • $1 $2 $3 ....

      • 预定义变量

        • 由bash预先定义好的变量

          • 如$PASH $HOME

      • 以下是常用的特殊变量,

      • $# 传送给命令Shell的参数个数

      • $- 在Shell启动或使用set命令时提供选项

      • $? 上一条命令执行后返回的值

      • $$ 当前shell的进程号

      • $! 上一个子进程的进程号

      • $@ 所有的参数,每个都用双括号括起 以遍历的形式,(遍历,扫描到一个数据,显示一次,在扫描在显示。

      • $* 所有参数,用双括号括起

      • $n 位置参数值,n表示位置

      • $0 当前shell名 路径

到此为止呢,对于脚本,对于变量会有浅显的认识,可以尝试自己编写安装源码包的脚本,来实践 ,如果有疑问欢迎留言,看到会解答。

  • 24
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值