首页 > 技术文章 > shell编程

lycc0210 2021-11-02 19:26 原文

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言 ,Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

创建一个文件:vim hello.sh 

文件头为:#!/bin/bash

执行bash脚本的第一种方法:直接运行 sh xxx.sh  

执行bash脚本的第二种方法:设置可执行权限

chmod 777 xxx.sh,之后就可以运行了,或者 chmod u+x xxx.sh

相对路径和绝对路径都可以执行

 

 shell的变量:(分为系统变量和自定义变量)

系统变量:$HOME $PWD  $SHELL $USER

显示当前shell中所有变量:   set | more

 自定义变量

 定义变量可以撤销变量unset

 

 定义一个静态变量,不能unset

 

变量命名

  定义变量的规则:

1:只能使用数字,字母和下划线,且不能以数字开头

2:变量名区分大小写,变量名称一般为大写

3:建议变量的名称要通俗易懂

注意:变量赋值是通过等号(=)进行赋值,在变量、等号和值之间不能出现空格。 显示变量值使用echo命令(类似于java中的system.out) ,加上$引用变量名,也可以使用${变量名}

  将变量的返回值赋给变量

1、A=`ll /home` 反引号,运行里面的命令,并把结果返回给变量A

2、A=$(date) 等价于反引号(推荐使用)

 

 

 

引号:

单引号:按原字符串输出

双引号:可以引用变量,拥有特殊含义的内容

 

 

拼接:连续获取变量

注意:

如果有多个引号,连续的形成一对

引号中使用其他引号,其他引号做字符串使用

 

 环境变量:

 

 

 位置参数变量:

 

 

 

 注意:位置变量直接$引用只能识别一位(只能识别$后第一位数字)${10}

 预定义变量:

 

 

 

数组:

  shell中的数组和一些开发语言的数组概念基本一致,有下标,有元素

  用括号来表示数组,数组元素用"空格"符号分割开。

  定义数组的一般形式为:

       数组名=(值1 值2 ... 值n) 例如: array_name=(value0 value1 value2 value3)

 

 

字符串

  获取长度

    格式:

      ${#变量}

  截取:

    格式:

      ${变量:开始位置:长度}

    注意:

    ${str::5}:从0获取5个

    ${str:0}:从0获取到末尾

  替换单个

    格式:

      ${变量/旧/新}

    注意:从左向右替换第一个

  替换所有

    格式:

      ${变量//旧/新}

    注意:替换不会再原字符上进行修改,想要修改原字符串只能从新赋值

  删除

    从头开始删除

      ${变量#表达式}:匹配第一个删除

      ${变量##表达式}:匹配最后一个删除

    从尾开始删除

      ${变量%表达式}:匹配第一个删除

      ${变量%%表达式}:匹配最后一个删除

    注意:从未开始删除,表达式还是从左向右去写

  删除不会再原字符上进行修改,想要修改原字符串只能从新赋值

 

运算符

算术运算符

  bash不支持简单的数学运算,可以通过命令实现expr

  格式1:

    `expr 值 + 值`

  注意:符号两边需要加上空格

  格式2:

    $[值+值]或$((运算式))

 

 

练习:求两个参数的和

 

比较运算符: > < >= <=....

  格式:

    $[值符号值](符号两边空格加不加无所谓)

  注意:比较的结果用1(true)和0(false)表示

 

逻辑运算符: &/and |/or !/not

  例如:

 

判断条件的写法

[] 括号和符号两边加空格
[] 使用符号需要加\转义符
[[]] 括号和符号两边加空格
 (弃用了)
(()) 真不能使用字母
只能使用符号 用变量时不需要加$

 

 

符号含义:

1. eq (equal的缩写),表示等于为真

2. ne (not equal的缩写),表示不等于为真

3. gt (greater than的缩写),表示大于为真

4. ge (greater&equal的缩写),表示大于等于为真

5. lt (lower than的缩写),表示小于为真

6. le (lower&equal的缩写),表示小于等于为真

 

test命令

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

 

 if语句:

 

 

 

case语句:

 

 

 

 

 

$*和$@的区别

一个看成整体,一个单独看

 

 

 while语句

 

 

 

 

 read读取控制台

 

 

 函数:

 

 

 

 自定义函数:

 

1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。

2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255

 

 

 shell日期:

获取当前日期时间

  date +"%Y-%m-%d %H:%M:%S"

格式化日期时间:

     date -d today +"%Y-%m-%d %H:%M:%S"

加减日期时间

  date +%Y%m%d //显示前天年月日

  date +%Y%m%d --date="+1 day" //显示前一天的日期

  date +%Y%m%d --date="-1 day" //显示后一天的日期  

  date +%Y%m%d --date="-1 month" //显示上一月的日期

  date +%Y%m%d --date="+1 month" //显示下一月的日期

  date +%Y%m%d --date="-1 year" //显示前一年的日期

  date +%Y%m%d --date="+1 year" //显示下一年的

 

shell重定向

command >> file 将输出以追加的方式重定向到 file

command > file 将输出重定向到 file

一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:

标准输入文件(stdin):stdin的文件描述符为0,默认从stdin读取数据。

标准输出文件(stdout):stdout 的文件描述符为1,默认向stdout输出数据。

标准错误文件(stderr):stderr的文件描述符为2,向stderr流中写入错误信息。

 

 

 

 定时器:

查看定时任务是否执行了,看日志

tail -f /var/log/cron

 

 

 

 执行脚本:

 

 

定时器

 

 

 结果

 

 关闭计时器

 

 

 

推荐阅读