2021-10-24

2021年10月25 晴 星期一

++++++++++++++++++++++++++
岁月不饶人哪,记也匆匆,忘也匆匆。当我低下头,看到满地的碎发,哎呀~~ 那掉的不是头发,都是我的记忆啊!!!
掉归掉,革命道路还很长,继续!
++++++++++++++++++++++++++

4.2)编写Shell脚本
先学习理论,了解一下什么是Shell脚本

Shell脚本方式有两种:
1、交互式(interactive):用户每输入一条命令就立刻执行
2、批处理(Bath):用户先写好一个完整的Shell脚本,Shell 会一次性执行脚本中的诸多命令
Shell脚本也有单独很多内容,先学会简单的编写脚本,运行脚本,和几种条件流程语句

(4.2.1)编写简单的脚本
一个脚本有三部分的内容组成
脚本声明 #! /bin/bash 声明此脚本用什么解释器自行
脚本注释# This is my first scripts 简单描述脚本的主题
脚本命令# 脚本的具体内容
“#” 代笔注释,它不会被程序读取执行

   #! /bin/bash
   # This is My first scripts
   #定义一个变量 PRICE 
      PRICE=100
  保存脚本文件后缀为 .sh  ,脚本要赋予可执行的权限如755,可以直接用bash 执行脚本,也可以输入完整的路径方式来自行。

(4.2.2)接收用户的参数

    脚本可以直接写好不间断执行,也可以进行交互执行。
    Bash 解释器内置变量  定义个变量用$ 
    1、$0  对应的是当前Shell脚本程序的名称
    2、$# 对应的是总共有几个参数
    3、$* 对应的是所有位置的参数值
    4、$? 显示上一次命令执行的返回值
    5、$1、$2、$3 .... 分别对应第N个位置的参数
    [root@linuxprobe ~]# vim aa.sh 

[root@linuxprobe ~]# cat aa.sh
#! /bin/bash

“This is my first scritps”

echo $0
echo KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲,*
echo $1,$3,$5
chmod 775 aa.sh

[root@linuxprobe ~]# bash aa.sh
aa.sh
0,
,
[root@linuxprobe ~]# ls -l aa.sh
-rwxrwxr-x. 1 root root 90 Oct 24 22:52 aa.sh
[root@linuxprobe ~]# sh aa.sh 1 22 3 44 55 678
aa.sh
6,1 22 3 44 55 678
1,3,55

(4.2.3)判断用户的参数

  按照测试对象来划分,条件测试语句可以分为4种:
  1、文件测试语句
  2、逻辑测试语句
  3、整数值比较语句
  4、字符串比较语句
  ***测试语句要放到”[   ]“,两边必须有空格
  文件测试所用的参数
  1、-d
  2、-e
  3、-f
  4、-r
  5、-w
  6、 -x
  是否是目录,文件是否存在,是不是以个文件,是否有读的权限,是否有写的权限,是否有可自行权限 
  测试一下用shell解释器内置变量$? ,显示一下上一天命令的主执行结果。返回值为0 代表存在 ,不存在显示非 0。
        [ -d aa.sh ]

[root@linuxprobe ~]# echo $?
1
[root@linuxprobe ~]# [ -f aa.sh ]
[root@linuxprobe ~]# echo $?
0
[root@linuxprobe ~]# [-e aa.sh ] # 没加空格,出现了错误提示
bash: [-e: command not found…
Failed to search for file: /media/cdrom/BassOS was not found
[root@linuxprobe ~]# [ -e aa.sh ]
[root@linuxprobe ~]# echo $?
0
[root@linuxprobe ~]# [ -r aa.sh ]
[root@linuxprobe ~]# echo $?
0
[root@linuxprobe ~]# [ -w aa.sh ]

每次敲两次命令,可以用逻辑运算符通过逻辑分析一次行自行完一些多次的命令操作

逻辑运算符 与“&&” , 或 “||” ,非“!”
1、与“&”:表示当前的命令执行成后才会执行它后面的命令
2、或“||” :表示当前的命令 执行失败后才会执行它后面的命令
3、非“!”用来取反值,即如果测试结果正确,则将其变成错误的,错误的结果改成正确的。

[root@linuxprobe ~]# ls -l bbb.conf
ls: cannot access ‘bbb.conf’: No such file or directory
[root@linuxprobe ~]# cat bb.sh
#! /bin/bash
#"Touch a file bbb.conf
#xiu gai quanxian 775
touch bbb.conf
chmod 775 bbb.conf
[root@linuxprobe ~]# pwd
/root

[root@linuxprobe ~]# [ -e bbb.conf ] && echo “ok” || bash /root/bb.sh && ls -l
ok
total 16
-rwxrwxr-x. 1 root root 90 Oct 24 22:52 aa.sh
-rw-------. 1 root root 1385 Oct 9 08:03 anaconda-ks.cfg
-rwxrwxr-x. 1 root root 0 Oct 24 23:49 bbb.conf
-rw-r–r--. 1 root root 94 Oct 24 23:45 bb.sh
drwxr-xr-x. 2 root root 6 Oct 10 04:01 Desktop

**“!”逻辑非,叹号应该放在判断语句的前面,代表对整个测试语句进行取反操作,正确的 [ ! $user = root || echo “administraor” ] , 不要想这样写 u s e r ! = r o o t , 因 为 “ ! = ” 代 表 的 是 不 等 于 符 号 ( ≠ ) , 执 行 效 果 一 样 , 但 缺 少 逻 辑 关 系 。 ∗ ∗ 几 个 小 实 验 [ l i n u x p r o b e @ l i n u x p r o b e r o o t ] user != root ,因为“!=”代表的是 不等于符号(≠),执行效果一样,但缺少逻辑关系。** 几个小实验 [linuxprobe@linuxprobe root] user!=root,!==[linuxprobe@linuxproberoot] [ KaTeX parse error: Expected 'EOF', got '#' at position 33: …echo "user" #̲当前不是root用户,|| … [ ! $USER = root ] || echo “user” #用逻辑 ! ,改变结果,结果正确 逻辑或 || 不执行,没有输出

[root@linuxprobe ~]# [ $USER = root ] || echo “user” #结果正确逻辑或 || ,不执行没有输出
[root@linuxprobe ~]# [ ! $USER = root ] || echo “administrator” # 用非改变结果,结果错误,逻辑或 ||, 执行,输出.
administrator

命令可以多次使用,不仅限于两组合

[root@linuxprobe ~]# [ ! $USER = root ] && echo “root” || echo “root” # 第一echo 是与运算,前面结果正确才会继续执行后面的命令,所以没有执行输出,后面的echo用的或 || 运算,错误才会执行,所以,root 是第二个echo的输出
root

可用的整数比较运算符

1、 -eq 是否等于
2、-ne 是否不等于
3、-gt 是否大于
4、-lt 是否小于
-5、le 是否小于等于
6、-ge 是否大于等于

一个内存小实验练习grep free awk 命令,cut统计需要有间隔符,所以此处不适用。做比较用"[ ]" 取结果用 ‘ 反引号。

先说逻辑,运行free命令调出系统内存使用情况free -m,用grep加“|“ grep | Mem:定位需要的行,用awk 定位或者叫搜索具体的列,并取值。awk ’{print $4}‘ (单引号),最后可以用一个变量,把他们做个整体,取值输出。最后在加一个逻辑判断
[root@linuxprobe ~]# free -m
total used free shared buff/cache available
Mem: 1966 1367 97 14 501 413
Swap: 2047 4 2043
[root@linuxprobe ~]# free -m | grep Mem: | awk ‘{print $4}’
97
[root@linuxprobe ~]# FreeMem=free -m | grep Mem: | awk '{print $4}'
[root@linuxprobe ~]# echo $FreeMem
96
[root@linuxprobe ~]# FreeMem=free -m | grep Mem: | awk '{print $4}'
[root@linuxprobe ~]# echo $FreeMem
86
[root@linuxprobe ~]# [ $FreeMem -lt 1024 ] && echo “it’s good”
it’s good

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值