栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Linux系统配置(shell基础)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux系统配置(shell基础)

目录

前言

一、编写shell

1、格式和运行

2、操作符号

3、当前变量

4、全局变量

5、永久变量

6、自定义变量

7、加法脚本

8、整数运算

9、系统变量

10、位置参数与预定义变量

11、打包备份脚本

12、测试操作

13、整数值对比

14、操作符

二、分支语句

1、单分支if语句

2、双分支语句

3、多分支语句

4、case格式多分支语句

结语


前言

     在进行linux系统维护时,重复性输入和交互式操作费时费力,可以通过编写shell脚本批量处理、自动化的完成一系列任务,减轻负担,shell多用于自动化部署、系统巡检和日志分割

一、编写shell

1、格式和运行

查看系统shell

cat /etc/shells

创建简单shell

[root@pc1 ~] vi shell.sh

添加如下内容
#!/bin/bash
echo "home目录下有以下文件"
cd /home
ls
echo "当前目录位置"
cd -

以下三种方法可运行shell

./文件 需要执行权限(chmod +x 文件)

sh 文件或/bin/bash 文件或bash 文件

source 文件或. 文件

2、操作符号

<          从指定文件读取数据
>          将shell脚本正确信息运行后输出结果保存到指定文件(覆盖)
>>        将shell脚本正确信息运行后输出结果保存到指定文件(追加)
2>        将shell脚本运行后其中的错误信息保存到指定文件(覆盖)
2>>      将shell脚本运行后其中的错误信息保存到指定文件(追加)
&>        将输出结果和错误信息保存到指定文件

3、当前变量

     变量的作用

用来存放系统和用户需要使用的特定参数(值)变量名:使用固定的名称,由系统预设或用户定义变量值:能够根据用户设置、系统环境的变化而变化

     变量的类型

自定义变量:由用户自己定义、修改和使用特殊变量:环境变量,只读变量,位置变量,预定义变量

当前变量(重启或bash或切换shell或切换用户后失效)

变量名=变量值
echo $变量名                        查看变量
echo $变量名1 $变量名2      查看多个变量

readonly 变量名                     设为只读变量

a=1.txt
touch $a相当于touch1.txt

lq='ls -lash'
$lq相当于ls -lash

4、全局变量

全局变量(bash或切换shell或切换用户后仍生效,重启失效)
export a=1.txt

a=1.txt
export a

5、永久变量

永久变量
在/etc/profile文件内容中添加变量可永久生效

[root@pc1 ~]# a=1.txt

echo "$a"
echo后面"$a"表示引用a的变量,输出结果为1.txt
echo '$a'
echo后面'$a'表示输出固定字符,输出结果为$a
echo `ls -la`或echo $(ls -la)
echo后面`ls -la`或$(ls -la)表示输出命令结果,相当于运行命令


[root@pc1 ~] echo '$a'"$a"bc
$a1.txtbc

6、自定义变量

可自定义输入变量
[root@pc1 ~] read -p "提示信息" a
提示信息 1
[root@pc1 ~] echo $a
1

7、加法脚本

[root@pc1 ~]# vi shell.sh
#!/bin/bash
echo "加法运算"
read -p '第1个数:' a1
read -p '第2个数:' b
read -p '第3个数:' c
echo '结果:' `expr $a1 + $b + $c`

[root@pc1 ~]# sh shell.sh
加法运算
第1个数:12
第2个数:12
第3个数:12
结果: 36

8、整数运算

加法
[root@pc1 ~] expr 1 + 2
3

减法
[root@pc1 ~] expr 10 - 7
3

乘法
[root@pc1 ~] expr 2 * 5 (使用乘号时,必须用反斜线,因为默认*代表全部而不是乘号)
10

除法
[root@pc1 ~] expr 10 / 2 / 5
1

取除法余数
[root@pc1 ~] expr 5 % 3
2

9、系统变量

PWD          用户当前路径
PATH         系统的路径变量(可执行命令路径,即为命令执行时查找的路径范围)
USER        当前登录用户
SHELL       当前用户使用的shell环境
HOME        当前用户的宿主目录

10、位置参数与预定义变量

位置参数变量
$数字          数字范围0~9,代表第几个位置参数,$0为当前程序进程或文件的名称

预定义变量
$#              命令行中位置变量个数
$*               所有位置变量的内容
$?               上一条命令执行后返回的状态,返回值为0表示执行正常,非0表示执行异常或出错

11、打包备份脚本

创建打包备份脚本
[root@pc1 ~]# vi shell.sh
添加如下内容
#!/bin/bash
a=beifen-`date +%F_%H·%M`.tar.gz
tar -zcf $a $* &> /root/3.txt
echo "已执行$0脚本"
echo "共完成$#个备份"
echo "具体内容包括:$*"

使用脚本备份文件
[root@pc1 ~]# sh shell.sh 1.txt 2.txt
已执行shell.sh脚本
共完成2个备份
具体内容包括:1.txt 2.txt

[root@pc1 ~]# ll
-rw-r--r--  1 root root  147 2月  10 21:10 beifen-2022-02-10_21·10.tar.gz

12、测试操作

条件测试
[root@pc1 ~]# test 条件表达式或[ 条件表达式 ]
[root@pc1 ~]# echo $?


文件测试
[root@pc1 ~]# [ 操作符 文件或目录 ]

常用的测试操作符
-d            测试是否为目录
-e            测试目录或文件是否存在
-f             测试是否为文件
-r             测试当前用户是否有权限读取
-w           测试当前用户是否有权限写入
-x            测试当前用户是否有权限执行

[root@pc1 ~]# [ -d 文件 ]
[root@pc1 ~]# echo $?
1
[root@pc1 ~]# [ -d 目录 ]
[root@pc1 ~]# echo $?
0

13、整数值对比

[ 整数1 操作符 整数2 ]

常用的测试操作符
-eq           等于(Equal)
-ne           不等于(Not Equal)
-gt            大于(Greater Than)
-It             小于(Lesser Than)
-le            小于或等于(Lesser or Equal)
-ge           大于或等于(Greater or Equal) 

[root@pc1 ~]# [ 3 -eq 3 ]
[root@pc1 ~]# echo $?
0
[root@pc1 ~]# [ 3 -ne 3 ]
[root@pc1 ~]# echo $?
1

[root@pc1 ~]# [ 1 -eq 2 ] || echo "budengyu"
budengyu
[root@pc1 ~]# [ 1 -eq 1 ] && echo "dengyu"
dengyu


[root@pc1 ~]# mem=`free -m|grep Men: | awk '{print $7}'`
[root@pc1 ~]# [ $mem -ge 1000 ]&&[ $mem -le 2000 ]&&echo 可用内存大于1000MB小于2000MB,当前内存为:"$mem"MB
可用内存大于1000MB小于2000MB,当前内存为:1182MB


等于
[ 数字1=数字2 ]

不等于
[ 数字1!=数字2 ]

字符串为空
[ -z 字符串 ]

14、操作符

在命令操作中
&& 表示前一条命令执行成功或正确时,才执行后一条命令
|| 表示上一条命令执行失败或错误后,才执行下一条命令

在测试命令符中
-a或&&            与,两者都要满足
-o或||                或,两者满足一个即可
!                        非,不满足

[root@pc1 ~]# ll
-rw-r--r--  1 root root    0 2月  11 16:04 a
[root@pc1 ~]# [ ! -d a ]&&mkdir b                不存在目录a就创建目录b(通常是不能存在某个文件或目录就创建某个文件或目录)
[root@pc1 ~]# ll
-rw-r--r--  1 root root    0 2月  11 16:04 a
drwxr-xr-x  2 root root    6 2月  11 16:06 b

二、分支语句

1、单分支if语句

如果目录/root/a不存在就创建目录/root/a
编辑shell内容如下
#!/bin/bash
a=/root/a
if [ ! -d $a ]
   then mkdir $a
fi

2、双分支语句

else表示如果then不成立则
编辑shell内容如下
#!/bin/bash
read -p '是否安装(yes或no):' a
if [ $a = yes ]
   then echo 安装成功
   else echo 安装失败
fi

检测主机是否可ping通
编辑shell如下(ping -c表示发送测试包数量 -i表示间隔时间多少秒,-W表示超时时间多少秒)
#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &>/dev/null
if [ $? -eq 0 ]
   then echo 主机$1可以ping通
   else echo 主机$1无法ping通
fi

检测服务端口是否开启
编辑shell如下
#!/bin/bash
netstat -naput|grep $1 &>/dev/null
if [ $? -eq 0 ]
   then echo $1端口正在运行
   else echo $1端口没有运行
fi

3、多分支语句

elif表示否则如果
编辑shell如下
#!/bin/bash
read -p '输入分数:' a
if [ $a = 100 ]
   then echo 满分
elif [ $a -le 99 ]&&[ $a -ge 80 ]
   then echo 优秀
elif [ $a -le 79 ]&&[ $a -ge 60 ]
   then echo 及格
elif [ $a -le 59 ]&&[ $a -ge 0 ]
   then echo 不及格
   else echo 输入错误,请输入0~100数值
fi

4、case格式多分支语句

编辑shell如下,129~131可以表示为129|13[0-1]),字母可以表示为[a-z][A-Z])
#!/bin/bash
read -p '输入分数:' a
case $a in
100)
   echo 满分
;;
[8-9][0-9])
   echo 优秀
   ;;
[6-7][0-9])
   echo 合格
;;
[0-5][0-9])
   echo 不合格
;;
0)
   echo 不合格
;;
*)
   echo 请输入0~100
;;
esac

结语

     一个合格的shell脚本应该遵循标准的脚本结构,能够给出友好的提示信息,更加容易读懂,对于代码较多、结构复杂的脚本,应该添加必要的注释文字

版权声明:本文为CSDN博主「1风天云月」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/le616616/article/details/122908704

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/733323.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号