linux变量声明str类型,理论:详细学习shell编程规范与变量————理论讲解 初学者一定要点进来...

前言:

shell脚本编程规范

shell脚本应用场景

shell编程规范

管道与重定向

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 标记语言 以标签形式存在,

xml文件格式

json 键:值 key:value a:10;

shell 优点:

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

数组 函数

一 : shell脚本概述

1.1 shell脚本的概念

将要执行的命令按照顺序保存到一个文本文件

给该文件可执行的权限,便于运行 +一个x的执行权限

可结合各种shell控制语句以完成更复杂的操作

1.2 shell脚本应用场景

重复性操作

批量化事务处理

自动化运维管理

服务器运行状态监控

定时任务执行

······

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

二 : shell的作用

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

介于系统内核与用户之间,负责解释命令行

c7c06b03424e7387a98297963134a34f.png

2.2 用户的登陆shell

登陆后默认使用的shell程序,一般为/bin/bash

不同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 编写脚本代码

使用vi文本编辑器

每行一条Linux命令,按执行顺序依次编写

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

方法二: 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 ~]#

方法三 : source 脚本文件路径

[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

标准输入:从该设备接受用户输入的数据

标准输出:通过该设备向用户输出数据

标准错误:通过该设备报告执行出错信息

33d0305a379587f7580609a87cd91afa.png

4.2 重定向操作 >

d534e003b12090bab68876bef5f050be.png

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

[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 变量的作用

为灵活管理limux系统提供特定参数,有两层意思

变量名:使用固定的名称,由系统预设或用户定义

变量值:能够根据用户设置、系统环境的变化而变化

变量的类型

自定义变量:由用户自己定义、修改和使用

环境变量:由系统维护,用于设置工作环境

位置变量:通过命令行给脚本程序传递参数

预定义变量:Bash中内置的一类变量,不能直接修改

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

变量名以字幕或下划线开头,区分大小写,建议全大写

变量名=变量值

查看变量的值

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

read [-p 提示信息] 变量名

[root@localhost ~]# vim demo.txt

#!/bin/bash

#this is test

read -p "请输入一个整数:" score

echo "你的成绩为$score"

[root@localhost ~]# sh demo.txt

请输入一个整数:996

你的成绩为996

~

从控制台的输入和输出

java的操作

ba326cd978bfd9b15fc521340364353a.png

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

格式1:export 变量名

格式2: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

expr 变量1 运算符 变量2 [运算符 变量3].。。。。。

常用运算符

加法运算:+

减法运算:-

乘法运算:* 乘法必须要加\,因为在shell语言中,*代表通配符号

除法运算:/

求模(取余)运算:%

[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 ~]# expr 3 \* 2

6

[root@localhost ~]# expr 3 * 2

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 环境变量

由系统提前创建,用来设置用户的工作环境

配置文件: /etc/profile、~/.bash_prolile

6.2 常见的环境变量

PWD\、PATH

USER、SHELL、HOME

[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 位置变量

表示为$n,n为1~9之间的数字

[root@localhost ~]# ./myprog.sh 'one' two three four five 'six'

'$1,第一个位置参数' '$6,第六位置参数'

[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 预定义变量

$#:命令行中位置变量的个数

$*:所有位置变量的内容

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

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

b940170e537331e0359516b1cb13c441.png

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

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

总结

重定向与管道操作

自定义变量的定义、查看、引用、赋值、作用范围

数值变量的运算

环境变量、位置变量、预定义变量的作用与用途

实验

实验环境

为了集中查看linux服务器各方面的运行情况,管理员(root)希望定制自己的登陆环境,以便自动显示监控信息。另外,通过编写简单的shell脚本,熟悉Linux自动化管理的基本途径

需求描述

编写登陆欢迎脚本welcome.sh

编写服务控制脚本实现start、stop、status 功能

#!/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"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值