当前位置: 首页 > backend >正文

shell脚本第一阶段

一、学习脚本的秘诀

多看(看懂)----》多模仿(多练)----》多思考

二、脚本的基本写法

#!/bin/bash
//脚本第一行,#! 魔法字符,指定脚本运行代码执行的程序。即它告诉系统这个脚本需要什么解释器来执行,也就是使用哪一种shell//以下内容是对脚本的基本信息的描述
# Name: 名字
# Desc: 描述describe
# Path: 存放路径
# Usage: 用法
# Update: 更新时间//下面就是脚本的具体内容
commands
...

三、脚本的执行方法

./xxx.sh或者绝对路径/shellbash/xxx.sh

也可以使用非标准执行:source xxx.sh或者bash xxx.sh或者.   xxx.bash

四、批量重命名多个文件

rename file1 test1 file1?.jpg

五、变量的定义

1.变量的分类

本地变量:当前用户自定义的变量。当前进程中有效,其他进程及当前进程的子进程无效。

环境变量:当前进程有效,并且能够被子进程调用

查看当前用户的环境变量                   env

查询当前用户的所有变量(临时变量与环境变量)       set

export       //将当前变量变成环境变量

export A=hello     //临时将一个本地变量(临时变量)变成环境变量
env|grep ^A

永久生效:

vim /etc/profile 或者~/.bashrc

export A=hello

或者

A=hello

export A

说明:系统中有一个变量PATH,环境变量

export PATH=/usr/local/mysql/bin:$PATH

全局变量:全局所有的用户和程序都能调用,且继承,新建的用户也默认能调用

$HOME/.bashrc         当前用户的bash信息(aliase、umask等)

$HOME/.bash_profile     当前用户的环境变量

$HOME/.bash_logout      每个用户退出当前shell时最后读取的文件

/etc/bashrc         使用bash shell用户全局变量

grep --color=auto

umask

/etc/profile          系统和每个用户的环境变量信息

mycat_home=/usr/local/mycat/bin

export mycat_home

执行mycat命令

# mycat

$ mycat

/etc/profile-->$HOME/.bash_profile-->$HOME/.bashrc-->/etc/bashrc-->$HOME/.bash_logout

系统内置变量(内置bash中变量):shell本身已经固定好了它的名字和作用。

$?:上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出错

若退出状态值为0,表示命令运行成功

若退出状态值为127,表示command not found

若退出状态值为126,表示找到了该命令但无法执行(权限不够)

若退出状态值为1$2,表示没有那个文件或目录

$$:当前所在进程的进程号     echo $$       eg:kill -9 'echo $$'      =exit    退出当前会话

$!:后台运行的最后一个进程号   (当前终端)     # gedit &

!$  调用最后一条命令历史中的参数

!!:调用最后一条命令历史

$#:脚本后面接的参数的个数

./1.sh a b c         输出结果为3

$*:脚本后面所有参数,参数当成一个整体输出,每一个变量参数之间以空格隔开

$@:脚本后面所有参数,参数是独立的,也是全部输出

$0:当前执行的进程/程序名 echo $0

$1~$9  位置参数变量

${10}~${n} 扩展位置参数变量 第10个位置变量必须用{}大括号括起来

变量定义规则:

shell中变量不分类型

变量名=变量值

等号两边不能有任何空格

变量名不能以数字或者特殊符号开头

变量名严格区分大小写

变量定义

有类型变量 declare -i/-r/-x/-a/-A

交互式定义变量read [-p/-n/-t/s] 变量名

数组定义

普通数组:元素的索引下标是整数

关联数组:元素的索引下标是字符串

定义数组:

 array1[索引下标]=元素1

 array2=([索引下标]=元素1 [元素下标]=元素2...)

变量获取

echo  $变量名

echo ${变量名}

-----------------------------------------------------------------------------------------------------------------

 四则运算

$(())

$[]

expr   expr 1 + 1

let

    n=1;let n=n=1

    n=1;let n+=1

i++和++i

对变量没影响,对表达式有影响,i++先赋值再自增,++i先自增再赋值。

        

http://www.xdnf.cn/news/18117.html

相关文章:

  • 自学中医笔记(二)
  • Mysql——分库分表后id冲突解决方案(即分布式ID的生成方案)
  • 【tips】unsafe-eval线上页面突然空白
  • python实现pdfs合并
  • Ansible 部署LNMP
  • Read View 在 MVCC 里如何工作的?
  • 下载大模型经常遇到的报错Still waiting to acquire lock on Wan2.1-VACE-14B/.cache与解决办法
  • Linux系统WireShark抓取本地网卡报文
  • 发布npmjs组件库
  • 套接字超时控制与服务器调度策略
  • 多台服务器批量发布arcgisserver服务并缓存切片
  • 开发指南133-设定列表分页的初始默认每页行数
  • vue从入门到精通:搭建第一个vue项目
  • 【React Hooks】封装的艺术:如何编写高质量的 React 自-定义 Hooks
  • Rust学习笔记(六)|Rust 中的常用集合(Vector、String、HashMap)
  • Rust 异步中的 Waker
  • Linux权限的学习
  • 概率论基础教程第4章 随机变量(三)
  • 【opencv-Python学习笔记(7):图像平滑处理】
  • IntelliJ IDEA 开发配置教程
  • 独立看门狗(IWDG)
  • 决策树简单实战
  • 「数据获取」《防城港市统计年鉴》(2014-2020)(获取方式看绑定的资源)
  • 图像分类精度评价的方法——误差矩阵、总体精度、用户精度、生产者精度、Kappa 系数
  • 详细探讨AI在金融、医疗、教育和制造业四大领域的具体落地案例,并通过代码、流程图、Prompt示例和图表等方式展示这些应用的实际效果。
  • 一套GoldenGate → Kafka → Flink → MySQL 的端到端增量同步方案
  • IDE开发系列(1)基于QT的简易IDE框架设计
  • 3D检测笔记:基础坐标系与标注框介绍
  • 深层语义知识图谱:提升NLP文本预处理效果的关键技术
  • 【P18 3-10】OpenCV Python—— 鼠标控制,鼠标回调函数(鼠标移动、按下、。。。),鼠标绘制基本图形(直线、圆、矩形)