shell脚本(二)

变量的作用

为灵活管理Linux系统提供特定参数,有两层意思:系统配置和用户设置。

 变量名:使用固定的名称,由系统预设或用户定义
 变量值:能够根据用户设置、系统环境的变化而变化
变量的类型
自定义变量:由用户自己定义、修改和使用
环境变量:由系统维护,用于设置工作环境
位置变量:通过命令行给脚本程序传递参数
预定义变量:Bash中内置的一类变量,不能直接修改

1. 变量:
作用:存储系统或用户需要的特定数值,一般经常调用的值可以赋变量,简化。
赋值:变量名=变量值
变量类型:1)环境变量: PATH SHELL HISTSIZE HOSTNAME USER
2)位置变量: $1 $2 $3 ifconfig ens32
3)预定义变量: $# $* $?
4)自定义变量:
调用变量:$变量名
${变量名}其它字符串

1)自定义变量:
赋值:变量名=变量值
unset 变量名
set | grep 变量名
例如: a=123 b=kali
Useradd $b
注意:变量名设置规则:由数字,字母,下划线组成,区分大小写
不能以数字开头
等号两边不要有空格
不要使用特殊符号
接受用户互动赋值:read 变量名
read 变量名变量名
read -p “请输入xxx:”变量名

2)环境变量:
linux系统自己创建的变量、变量名一般为大写
如:HOSTNAME PATH HISTSIZE USER LOGNAME
如何查看:
env或set
定义环境变量的文件:/etc/profile
单个用户的环境变量文件:~/.bash_profile

家目录下的脚本:
如.bash_logout 登出时执行的脚本,可以修改。
.bash_profile 登录时执行的脚本

3)位置变量:
命令字/执行脚本 $1 $2 ……..

案例1:
vim user.sh
useradd $1 &>>/dev/null
echo $2 | passwd --stdin $1

cat c.sh
./c.sh 22 33
源码
#!/bin/bash
echo "The sum of your 2 numbers:"
expr $1 + $2
echo "你输入的数字个数是:"
echo $#
echo "你输入的2个加数是:"
echo $*
echo "你运行加法的进程ID是:"
echo $$
echo "你的程序是否运行成功,0为成功,其它数字不成功"
echo $?
echo "你的程序名称是:"
echo $0
echo "程序运行ok."

预定义变量:
Bash预先定义好的一类特殊变量

变量的特殊用途:
" " //执行变量
DAY=sunday
echo $DAY
sunday
TODAY="Today is $DAY"
echo $TODAY
Today is sunday

'' //不执行变量
DAY=sunday
echo $DAY
sunday
TODAY=’Today is $DAY’
echo $TODAY
Today is $DAY

` ` //执行命令,并取值
usernum=`w | wc -l`
echo $usernum

命令:who w

示例:

#### To backup etcdir..
#Copyright by jason, writed 20180704.
DAY=$(date +%Y%m%d)
toDIR=/home/b66/bak
mkdir -p $toDIR;cd $toDIR
tar zcvf b66bak-etc-profileold-$DAY.gz /etc
#bak program over.

数值变量的运算方法:对整数进行运算
x=20
y=7
expr $y + $x

 +-
\*
/
%

expr 类似用法 [] 或(()) 优点:不用加空格
但 [] 或(())不是命令,$的特殊用法 $[]并需要与echo配合使用
例如:
echo $[1+1]
2

X=1
echo $[x+1]
echo $[x*2]
echo $((x+3))

=======================================

2. Shell脚本的应用二:条件测试

条件测试:脚本的智能化?让脚本具有识别依据:
测试种类:
1) 文件或目录的存在判断及读写状态
2) 数值的大小比较测试
3) 字符串是否匹配测试
4) 多条件组合

条件测试有2种方式:
1.test 选项 值/参数

  1. [ 选项 参数/值 ]

1)文件或目录的判断及读写状态

可以等效简化:
[ -d /tmp/hello ]
echo $?
或者简化为:
[ -d /tmp/hello ] ;echo “yes”

2)数值的大小比较测试
-gt
-ge
-lt
-le
-eq

3)字符串是否匹配测试
== 两个字符串相同
!= 两个字符串不相同
-z 是否为空
-n 是否不为空 相当于!z
案例:
[ $(who | wc -l) -le 5 ] ; echo “少于5个用户”
[ $USER == “root” ] ; echo “the user is 超级用户”
[ $USER != “root” ] ;echo “the user is 普通用户”
[ -z “” ] ; echo yes
[ -z “ ” ] ;echo yes
4)多条件组合:

示例:
cat c.sh
./c.sh 22 33
#!/bin/bash
echo "The sum of your 2 numbers:"
expr $1 + $2
echo "你输入的数字个数是:"
echo $#
echo "你输入的2个加数是:"
echo $*
echo "你运行加法的进程ID是:"
echo $$
echo "你的程序是否运行成功,0为成功,其它数字不成功"
echo $?
echo "你的程序名称是:"
echo $0
echo "程序运行ok."

[root@localhost ~]# cat d.sh
#!/bin/bash
clear
read -p "Please input your username:" Auser
echo "Welcome $Auser to beijing : "

a.sh user1 111111
#!/bin/bash
useradd $1
echo $2|passwd --stdin $1

作业

1、 编写一个脚本要求将free命令看到内存的free值和used值显示出来。
2、 制作一个备份mysql数据库的脚本mysqlbak.sh,要求将/var/lib/mysql目录进行打包压缩到/opt/dbbak目录中,并且在备份文件名中加入当前时间。以及在打包的同时将当前目录的大小和当前写入一个文本dbinfor.txt内一起压缩,方便解压人员了解当前备份信息。

转载于:https://blog.51cto.com/jxwpx/2318421

第二十二章 SHELL脚本-CENTOS7.5知识相关推荐

  1. 第二十四章 SHELL脚本-CENTOS7.5知识

    shell脚本(四) 程序结构: IF结构.for结构.while结构.case结构 1.分支结构 2.分支示例 case语句编写 #!/bin/bash case $1 in anquan) ech ...

  2. 第十二章 Shell脚本编写及常见面试题(三)

    本章目录: 12.21 FTP下载文件 #!/bin/bash if [ $# -ne 1 ]; thenecho "Usage: $0 filename" fi dir=$(di ...

  3. linux脚本求命令行上整数和,《Linux命令行与shell脚本编程大全》 第二十二章 学习札记...

    <Linux命令行与shell脚本编程大全> 第二十二章 学习笔记 第二十二章:使用其他shell 什么是dash shell Debian的dash shell是ash shell的直系 ...

  4. 第二十二章 SQL命令 CREATE TRIGGER(二)

    文章目录 第二十二章 SQL命令 CREATE TRIGGER(二) SQL触发器代码 ObjectScript触发代码 字段引用和伪字段引用 引用流属性 引用SQLComputed属性 标签 方法调 ...

  5. 鸟哥的Linux私房菜(服务器)- 第二十二章、邮件服务器: Postfix

    第二十二章.邮件服务器: Postfix 最近更新日期:2011/08/10 在这个邮件服务器的架设中,我们首先谈论 Mail 与 DNS 的重要相关性,然后依序介绍 Mail Server 的相关名 ...

  6. 【正点原子MP157连载】第二十二章 新字符设备驱动实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  7. stm32l0的停止模式怎么唤醒_探索者 STM32F407 开发板资料连载第二十二章 待机唤醒实验

    1)实验平台:alientek 阿波罗 STM32F767 开发板 2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第二十二章 待机唤醒实 ...

  8. stm32 文件系统dma大小_「正点原子NANO STM32F103开发板资料连载」第二十二章 DMA 实验...

    1)实验平台:[正点原子] NANO STM32F103 开发板 2)摘自<正点原子STM32 F1 开发指南(NANO 板-HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 ...

  9. 数字图像处理:第二十二章 基于模型的编码

    第二十二章基于模型的编码 目录 引言 基于对象的编码 基于模型的编码 作业 1. 引言 为了获得更高的压缩效率并保持一定的视频质量以支持超低码率(大约10kbps)双向视频应用,不考虑内容特点的仅仅针 ...

最新文章

  1. ACM MM 2020:一种基于情感脑电信号时-频-空特征的3D密集连接网络
  2. Caffe代码导读(2):LMDB简介
  3. JavaScript 的内部字符编码是 UCS-2 还是 UTF-16
  4. Linux的scan命令,linux的scan命令
  5. java弹窗 触发事件_关于ElementUI中MessageBox弹框的取消键盘触发事件(enter,esc)关闭弹窗(执行事件)的解决方法...
  6. 禁用oracle的默认账户,Oracle EBS默认的账户
  7. SpringMVC的json数据交互
  8. c#自定义可拖动变形控件
  9. 支付宝系统架构参考(架构图,最新揭秘)
  10. 华硕FL5900U如何关闭ahci_「IT之家评测室」华硕灵锐 14 体验评测,轻薄身材也能有大能量...
  11. 适用于ARM开发板的Armbian Linux22.08发布
  12. LiveZilla-最好的免费在线客服介绍和详细说明
  13. 故障排查——CPU使用率过高
  14. WIFI、路由器、猫、AP管理
  15. Java集合框架详解
  16. 神经网络模型画图工具,神经网络模型图怎么画
  17. js中常见的Json解析
  18. 手机APP开发:学JAVA转安卓APP开发是不是很容易?
  19. Java io流的使用操作
  20. 高价地块接连入市 房企抄底推热一线城市土地市场

热门文章

  1. js post中服务器500错误信息,node.js - Node Express Post 500(内部服务器错误)jquery-3.4.1.min.js - 堆栈内存溢出...
  2. skype linux 安装,如何在Ubuntu 18.04上安装Skype
  3. fields在php中,phpmysqli_num_fields函数怎么用
  4. 山东财经大学python实验六答案_实验六(带答案)
  5. R-C3D 视频活动检测的经典算法
  6. “躲避球”体育游戏《Sparc》登陆Rift和Vive,可以和PS用户一起玩了【附游戏视频】
  7. 果蝇玩VR登Nature,发现注意力机制、工作记忆都有,昆虫大脑原来没比哺乳类差多少...
  8. 波士顿动力机器狗半夜遛弯儿惊呆路人,还配合拍照,网友:想到了《黑镜》...
  9. AI创业公司最佳「开发工具」指南火了,还发现了个可挑战Jupyter的「杀手」
  10. iPhone用户状告App厂商手脚不干净,偷窥我电脑剪切板干什么