理论+实操 :shell编程规范与变量————理论讲解,新手必看

发布时间:2020-07-05 01:54:46 作者:wx5d8b05ec4cbc3
来源:网络 阅读:228

-[TOC]

第一章 shell编程规范与变量————理论讲解

前言:

本次学习了解的是变量

语言分为两大类

1.强语言:定义变量的时候需要声明数据类型,一旦声明,就不可变 jave c语言

1整型 init 1 2 3 100

长整型 long

2浮点型 单精度 float 4字节

   双精度  double   8字节

带小数点就是浮点型

3.string 字符串

char 字符 英文字母字符 a 占一个字节

​ 中文汉字字符,男 占两个字节

而在java中,所有字符都占两个字节

4 boolean 布尔值 ture 和false

5 date 日期

int a=10; a

弱语言 :shell javascript python 不需要声明

a=10;

a=10.1;

给a赋予任意含义,都可以

html 标记语言 以标签形式存在,

<head><haed>

<img src="">

xml文件格式

json 键:值 key:value a:10;

shell 优点:

​ 变量直接定义,不需要声明,没有面向对象思想,所有的语言编写犹如记流水账

数组 函数

一 : shell脚本概述

1.1 shell脚本的概念

1.2 shell脚本应用场景

首先要先把命令记熟,和语句

二 : shell的作用

2.1 shell的作用——命令解释器,“翻译官”

2.2 用户的登陆shell

[root@localhost ~]# cat /etc/shells
/bin/sh
'/bin/bash'
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
[root@localhost ~]# 

三 :编写第一个shell脚本

3.1 编写脚本代码

t@localhost ~]# vi frist.sh
#!/bin/bash  'shell脚本固有格式'
cd /boot/
pwd
ls -lh vml*
[root@localhost ~]# chmod 744 frist.sh 
[root@localhost ~]# ./frist.sh 
/boot
-rwxr-xr-x. 1 root root 5.7M 10月 23 13:40 vmlinuz-0-rescue-33c124456fa34c50a98483245dfea58d
-rwxr-xr-x. 1 root root 5.7M 8月  23 2017 vmlinuz-3.10.0-693.el7.x86_64

;表示一句话的结束,可以使用分号同时使用两条命令

[root@localhost boot]# ls;who       ‘命令用分号隔开可以同时执行两个命令’
config-3.10.0-693.el7.x86_64
efi
grub
grub2
initramfs-0-rescue-33c124456fa34c50a98483245dfea58d.img
initramfs-3.10.0-693.el7.x86_64.img
initrd-plymouth.img
symvers-3.10.0-693.el7.x86_64.gz
System.map-3.10.0-693.el7.x86_64
vmlinuz-0-rescue-33c124456fa34c50a98483245dfea58d
vmlinuz-3.10.0-693.el7.x86_64
root     :0           2019-11-25 13:43 (:0)
root     pts/0        2019-11-25 17:06 (:0)

3.2 执行脚本文件 ./

[root@localhost ~]# ./frist.sh 
[root@localhost ~]# sh frist.sh 
/boot
-rwxr-xr-x. 1 root root 5.7M 10月 23 13:40 vmlinuz-0-rescue-33c124456fa34c50a98483245dfea58d
-rwxr-xr-x. 1 root root 5.7M 8月  23 2017 vmlinuz-3.10.0-693.el7.x86_64
[root@localhost ~]# 
[root@localhost ~]# source frist.sh 
/boot
-rwxr-xr-x. 1 root root 5.7M 10月 23 13:40 vmlinuz-0-rescue-33c124456fa34c50a98483245dfea58d
-rwxr-xr-x. 1 root root 5.7M 8月  23 2017 vmlinuz-3.10.0-693.el7.x86_64
[root@localhost boot]# 

./ 此方法的文件必须要有执行x权限

sh 执行 ,当前路径无变化

source 执行,当前路径有变化

3.3 更完善的脚本构成

[root@localhost ~]# vim frist.sh 
#!/bin/bash
#this is my frist shell-script.
cd /boot/
echo “当前的目录位于:”     '输出友好提示信息'
pwd
echo “其中以vml开头的文件包括:”
ls -lh vml*
~             

echo 代表输出语句,输出字符串用双引号

[root@localhost ~]# ./frist.sh 
当前的目录位于:
/boot
其中以vml开头的文件包括:
-rwxr-xr-x. 1 root root 5.7M 10月 23 13:40 vmlinuz-0-rescue-33c124456fa34c50a98483245dfea58d
-rwxr-xr-x. 1 root root 5.7M 8月  23 2017 vmlinuz-3.10.0-693.el7.x86_64

四 : 重定向与管道操作

4.1 交互式硬件设备 0 1 2

理论+实操 :shell编程规范与变量————理论讲解,新手必看

4.2 重定向操作 >

理论+实操 :shell编程规范与变量————理论讲解,新手必看

重定向符号可以用来写日志文件

[root@localhost ~]# chattr +i /etc/passwd   '给账号文件加锁'
[root@localhost ~]# lsattr /etc/passwd      '查看已枷锁'
----i----------- /etc/passwd
[root@localhost ~]# useradd zhaoyun         '测试'
useradd:无法打开 /etc/passwd        '标准错误输出'
[root@localhost ~]# useradd zhaoyun 2> err.txt      '使用2>重定向'
[root@localhost ~]# ls
anaconda-ks.cfg  frist.sh              test.sh  模板  图片  下载  桌面
err.txt          initial-setup-ks.cfg  公共     视频  文档  音乐
[root@localhost ~]# cat err.txt '查看'
useradd:无法打开 /etc/passwd

4.3 管道操作符号“|”

'cmd1 | cmd2 [... | cmdn]
[root@localhost ~]# grep "bash$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
gsy:x:1000:1000:gsy:/home/gsy:/bin/bash
[root@localhost ~]# grep "bash$" /etc/passwd | awk -F: '{print $1,$7}'
root /bin/bash
gsy /bin/bash
[root@localhost ~]# 

正则表达式三剑客

grep egrep 老大 过滤关键字

sed 老二 按行读取

awk 老三 按列读取数据

awk -F 指定分隔符 如果不加-F,则默认分隔符为制表符或空格

'{print 打印 $1 第一个参数 $7 第七个参数}'

$1 $2 代表位置变量

[root@localhost ~]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        20G  7.6G   13G   38% /
devtmpfs                devtmpfs  977M     0  977M    0% /dev
tmpfs                   tmpfs     993M     0  993M    0% /dev/shm
tmpfs                   tmpfs     993M  9.0M  984M    1% /run
tmpfs                   tmpfs     993M     0  993M    0% /sys/fs/cgroup
/dev/sda1               xfs       6.0G  161M  5.9G    3% /boot
/dev/mapper/centos-home xfs        10G   37M   10G    1% /home
tmpfs                   tmpfs     199M   20K  199M    1% /run/user/0
/dev/sr0                iso9660   4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64

[root@localhost ~]# df -Th | awk '{print $1,$2,$6}'
文件系统 类型 已用%
/dev/mapper/centos-root xfs 38%
devtmpfs devtmpfs 0%
tmpfs tmpfs 0%
tmpfs tmpfs 1%
tmpfs tmpfs 0%
/dev/sda1 xfs 3%
/dev/mapper/centos-home xfs 1%
tmpfs tmpfs 1%
/dev/sr0 iso9660 100%

五 : shell变量的作用、类型

5.1 变量的作用

5.2 定义一个新的变量——自定义变量 = echo

[root@localhost ~]# addr=192.168.100.100
[root@localhost ~]# echo $addr
192.168.100.100
[root@localhost ~]# addr=10
[root@localhost ~]# echo $addr
10
[root@localhost ~]# num=$addr
[root@localhost ~]# addr=20
[root@localhost ~]# echo $addr $num
20 10
[root@localhost ~]# product=puthon
[root@localhost ~]# version=3.7
[root@localhost ~]# echo $product $version
puthon 3.7
[root@localhost ~]# echo $product2.8    ’当变量名与数字连起来时,则不显示‘
.8
[root@localhost ~]# echo $product 2.8
puthon 2.8
[root@localhost ~]# 
[root@localhost ~]# echo ${product}2.8  '想要的出来的结果与数字连在一起,就需要用上{}符号'
puthon2.8

=号是赋值符号,把右边的值赋予给左边的值

addr="192.168.100.100";

_abc="hello";

变量开头不可以以数字和汉字为开头,只可以为字母或者下划线

java的命名方法叫字下美人数骆驼

骆驼是骆驼命名法

输出时,要把变量前面加$符号

变量赋值相当于在内存中开辟了一个存储空间,把赋予的值放在空间内

5.3 赋值时使用引号

[root@localhost ~]# ps aux |wc -l
204
[root@localhost ~]# num=`ps aux | wc -l`
[root@localhost ~]# echo $num
203
[root@localhost ~]# abc=$(ps aux | wc -l)
[root@localhost ~]# echo $abc
203

请输入你想管理的服务 如何管理你的服务(选项:start,status,stop)

5.4 从键盘输入内容为变量赋值 read

[root@localhost ~]# vim demo.txt

#!/bin/bash
#this is test
read -p "请输入一个整数:" score
echo "你的成绩为$score"
[root@localhost ~]# sh demo.txt 
请输入一个整数:996
你的成绩为996

~                         

从控制台的输入和输出

java的操作

理论+实操 :shell编程规范与变量————理论讲解,新手必看

5.5 设置变量的作用范围 export 设置全局可用

export可以把变量定义为全局变量,这样的话,不管是切换bash环境,还是切换用户都可以使用该变量

[root@localhost ~]# echo $abc
203
[root@localhost ~]# bash
[root@localhost ~]# echo $abc

[root@localhost ~]# exit
exit
[root@localhost ~]# echo $abc
203
[root@localhost ~]# export $abc     '只识别变量名'
bash: export: `203': 不是有效的标识符
[root@localhost ~]# export abc
[root@localhost ~]# bash
[root@localhost ~]# echo $abc
203
[root@localhost ~]# exit
exit
[root@localhost ~]# 

5.6 整数变量的运算 expr

[root@localhost ~]# expr 3 + 2
5
[root@localhost ~]# expr 9 - 10
-1
[root@localhost ~]# expr 9 / 10
0
[root@localhost ~]# expr 10 / 9
1
[root@localhost ~]# expr 10 / 8
1
[root@localhost ~]# expr 6 / 3
2
[root@localhost ~]# exp
6
[root@localhost ~]# exp
expr: 语法错误
[root@localhost ~]# expr 39 % 5
4
[root@localhost ~]# echo $(expr 3 + 3)
6
[root@localhost ~]# sum='expr 3 + 3'    '单引号'
[root@localhost ~]# echo $sum
expr 3 + 3
[root@localhost ~]# sum=`expr 3 + 3`    '反撇号'
[root@localhost ~]# echo $sum
6

六 : 特殊的shell变量

6.1 环境变量

6.2 常见的环境变量

[root@localhost ~]# vim /etc/profile
MAIL="/var/spool/mail/$USER"
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

[root@localhost ~]# echo $MAIL
/var/spool/mail/root
[root@localhost ~]# echo $HOSTNAME
localhost.localdomain

[root@localhost ~]# echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin
[root@localhost ~]# PATH="$PATH:/root"
[root@localhost ~]# echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin:/root

:加环境变量

6.3 位置变量

[root@localhost ~]# vim demo.sh
sum=0
sum=`expr $1 + $2`
echo "总和为$sum"
echo "执行的脚本是$0"
echo "参数的个数是$#"
echo "详细内容是$*"
cho "执行成功$?"
[root@localhost ~]# sh demo.sh 70 80
总和为150
执行的脚本是demo.sh
参数的个数是2
详细内容是70 80
执行成功0

统计是$#,

除此之外还有$? 是否执行成功,成功是0,不成功是非0值

详细内容是$*

6.4 预定义变量

理论+实操 :shell编程规范与变量————理论讲解,新手必看

/dev/null 类似一个拥有无限容量的目录,所有不用的文件都可以放到里面,一旦放进去,无法找回,慎用

跟/dev/null类似的还有/dev/zero,一个拥有无限大的文件,两个都做测试使用

总结

实验

实验环境

需求描述

#!/bin/bash
username=`whoami`
percent=20
echo "====欢迎你, $username===="
echo "以下分区使用率超过$percent%"
df -Th  | awk -v percent=$percent 'BEGIN {NR!=1} {if ($6 > percent){print $7"\t"$6} }'

[root@localhost bash]# echo "/root/bash/welcome.sh" >> /root/.bashrc
[root@localhost bash]# su - root
Last login: Mon Nov 25 18:44:16 GMT 2019 on pts/2
====欢迎你, root====
以下分区使用率超过20%
Mounted Use%
/ 25%
/boot 33%

然后把这个脚本的绝对路径写入到~/.bashrc中即可

#!/bin/bash
#this is zuoye
systemctl stop firewall.sevrice
setenforce 0
read -p "请输入你想管理的服务:" score
read -p "如何管理你的服务(选项:start,status,stop)" scorea
systemctl $scorea $score
echo "systemctl $scorea $score"
推荐阅读:
  1. MySQL——全量、增量备份与恢复(理论+实操)
  2. 理论+实操 :源码编译安装LAMP

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

linux shell脚本 shell编程规范与变量

上一篇:gpfdist通过外部表创建的文件权限问题

下一篇:Lync Server 2013 标准版部署(三)数据库安装

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》