Shell脚本--变量(后附简单shell脚本练习)!
2021/6/3 7:25:21
本文主要是介绍Shell脚本--变量(后附简单shell脚本练习)!,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
shell脚本
- 一、Shell脚本概述
- 1.1shell脚本应用场景
- 1.2重定向操作
- 1.3整数变量的运算
- 二、Shell脚本变量
- 2.1自定义变量
- 2.2环境变量
- 2.3位置变量
- 2.4预定义变量
- 三、简单Shell脚本编辑
- 3.1shell脚本执行的基本命令
- 3.2shell脚本设置本地yum仓库
- 3.3下载服务器的shell脚本
- 3.4创建新用户并基于密码
- 3.5shell脚本小练习
一、Shell脚本概述
shell脚本是利用shell的功能所写的一个程序,这个程序是使用可执行文件,将一些shell的语法和命令写在里面,搭配正则表达式,管道命令与重定向等功能,来达到我们所要的处理的目的
1.1shell脚本应用场景
- 重复性操作
- 交互性任务
- 批量事务处理
- 服务运行状态监控
- 定时任务执行
- 简易入侵检测功能
1.2重定向操作
< :从指定的文件读取数据,而不是从键盘输入 > :将输出结果保存到指定文件,会覆盖文件原内容 >> :将输出结果追加到文件内的尾部 2> :将错误信息保存到指定文件,覆盖文件内容 2>> :将错误信息追加到指定文件中 &> :将标准输出、标准错误的内容保存到同一个文件中
1.3整数变量的运算
expr 变量名 运算符 变量名 echo $[ 变量运算符变量 ] 也可以是 :echo $(( 变量运算符变量 ))
在这里插入代码片[root@localhost ~]# expr 2 + 2 4 [root@localhost ~]# expr 3 / 2 //取整数 1 [root@localhost ~]# expr 1 / 2 0 [root@localhost ~]# expr 5 % 2 //取余数 1 [root@localhost ~]# echo $ [ 2+2 ] $ [ 2+2 ] [root@localhost ~]# echo $[ 2+2 ] 4 [root@localhost ~]# echo $[ 2**5 ] //2的5次方 32 [root@localhost ~]# a=3 [root@localhost ~]# b=2 [root@localhost ~]# echo $[ $a+$b ] 5 [root@localhost ~]# echo "3.14+2" | bc //计算带小数点的用bc计算器, 5.14 [root@localhost ~]# echo "2^5" | bc //bc计算器中的平方用的是^符号 32
[root@localhost ~]# ls anaconda-ks.cfg initial-setup-ks.cfg y.sh yum.sh 公共 模板 视频 图片 文档 下载 音乐 桌面 [root@localhost ~]# touch ttt.txt [root@localhost ~]# ls > ttt.txt [root@localhost ~]# cat ttt.txt anaconda-ks.cfg initial-setup-ks.cfg ttt.txt y.sh yum.sh 公共 模板 视频 图片 文档 下载 音乐 桌面 [root@localhost ~]# ls xxx ls: 无法访问xxx: 没有那个文件或目录 [root@localhost ~]# ls xxx 2> ttt.txt [root@localhost ~]# cat ttt.txt ls: 无法访问xxx: 没有那个文件或目录 [root@localhost ~]# echo 222 > ttt.txt [root@localhost ~]# cat ttt.txt 222 [root@localhost ~]# cat < ttt.txt 222
二、Shell脚本变量
2.1自定义变量
- 也叫局部变量,只是临时添加的变量
- 添加变量 :变量名=变量值,变量名由字母、数字、下划线组成,不能以数字开头,不能是特殊符号,区分大小写
变量名=变量值 :添加变量 unset 变量名 :删除变量 set :查看当前系统所有变量 declare -i 变量 :设定变量为整数类型变量 readonly 变量 :将变量赋值后可设定变量为只读,将不能删除变量和更改变量赋值 read 变量名 :会进入交互模式,在下面输入参数即可 read -p "文字描述:" 变量名 :以文字提示赋值变量 read -n 5 -p "文字描述:" 变量名 :赋值变量的字符数最多为5个
赋值时添加引号
- 双引号:允许通过$符号引用其他变量值
- 单引号:禁止引用变量值,$视为普通字符
- 反撇号:命令替换,提取命令执行后的输出结果,也可以用$()
[root@localhost ~]# a=whd [root@localhost ~]# echo $a //这里的$表示引用变量 whd [root@localhost ~]# let a=a+1 //给a加1赋值,如果a以赋值字母,则赋值为1 [root@localhost ~]# a="hello wold" [root@localhost ~]# echo $a hello wold [root@localhost ~]# A=88 [root@localhost ~]# echo $A 88 [root@localhost ~]# unset A [root@localhost ~]# echo $A [root@localhost ~]# [root@localhost ~]# a=10 [root@localhost ~]# declare -i a //设定为整数型变量后,器变量值只能为整数 [root@localhost ~]# a=whd [root@localhost ~]# echo $a 0 [root@localhost ~]# py=66 [root@localhost ~]# pb="pp $66" [root@localhost ~]# echo $py 66 [root@localhost ~]# echo $pb pp 6 [root@localhost ~]# b=`date` //这里双斜点表示将命令赋值给变量 [root@localhost ~]# echo $b 2021年 06月 01日 星期二 14:35:59 CST [root@localhost ~]# c=$(date) //$()跟双斜点相同 [root@localhost ~]# echo $c 2021年 06月 01日 星期二 14:36:32 CST [root@localhost ~]# rpm -ql $(rpm -qf $(which rz)) /usr/bin/rb /usr/bin/rx /usr/bin/rz /usr/bin/sb /usr/bin/sx /usr/bin/sz /usr/share/locale/de/LC_MESSAGES/lrzsz.mo /usr/share/man/man1/rz.1.gz /usr/share/man/man1/sz.1.gz [root@localhost ~]# readonly b [root@localhost ~]# b=88 -bash: b: 只读变量 [root@localhost ~]# unset b -bash: unset: b: 无法反设定: 只读 variable [root@localhost ~]# read namde whd [root@localhost ~]# read name whd [root@localhost ~]# echo $name whd [root@localhost ~]# read -p "请输入姓名:" name 请输入姓名:zhangsan [root@localhost ~]# echo $name zhangsan [root@localhost ~]# read -p "请输入密码:" pass 请输入密码:123 [root@localhost ~]# echo $pass 123
2.2环境变量
系统已定义好的全局变量,其变量名必须是大写
env :查看系统中所有的环境变量 vim /etc/profile :编辑环境变量,可以永久性添加环境变量 [root@localhost ~]# export aa=10 //临时将自定义变量加入环境变量中 [root@localhost ~]# env | grep aa aa=10 [root@localhost ~]# export PATH=$PATH:/root //临时将/root目录加入环境变量中
[root@localhost ~]# vim /etc/profile //将/root目录永久加入环境变量中
2.3位置变量
[root@localhost ~]# vim wz.sh #!/bin/bash echo $0 //$0表示当前执行的脚本 echo $1 //$1表示第一个参数 echo $2 //$2表示第二个参数 echo $n //表示第n个参数 [root@localhost ~]# chmod +x wz.sh //给予文件可执行权限 [root@localhost ~]# ./wz.sh a b //脚本有位置变量,在执行脚本时需要根据位置变量添加参数 ./wz.sh a b [root@localhost ~]# vim user.sh #!/bin/bash #创建用户 useradd $1 echo "$2" | passwd --stdin $1 [root@localhost ~]# chmod +x user.sh [root@localhost ~]# ./user.sh wangwu 123 更改用户 wangwu 的密码 。 passwd:所有的身份验证令牌已经成功更新。
2.4预定义变量
由bash程序预先定义好的特殊变量,无法创建新的预定义变量,也不能给预定义变量赋值
$# :表示命令行中位置参数的个数 $* :表示所有位置参数的内容,这些内容为一个整体 $? :表示前一条命令执行后的结果,如果是0表示执行成功,如果是非0数,表示执行失败 $$ :表示当前进程的进程号 $! :表示最后一个后台进程的进程号 $@ :表示所有位置参数内容,这些内容不为一个整体
[root@localhost ~]# ls xxx ls: 无法访问xxx: 没有那个文件或目录 [root@localhost ~]# echo $? 2 //非0数字表示上个命令为成功 [root@localhost ~]# ls anaconda-ks.cfg initial-setup-ks.cfg ttt.txt user.sh wz.sh y.sh yum.sh 公共 模板 视频 图片 文档 下载 音乐 桌面 [root@localhost ~]# echo $? 0 //表示上个命令成功 [root@localhost ~]# sleep 1000 & //将进程放入后台 [1] 84863 [root@localhost ~]# echo $! 84863
三、简单Shell脚本编辑
3.1shell脚本执行的基本命令
bash或者sh 脚本文件 :在当前shell环境再开一个shell环境执行 source 脚本文件 :在当前shell环境执行 在脚本文件所属目录下时也可以使用:./脚本文件 .脚本文件 bash -x 脚本文件 :测试脚本文件中每一行是否有问题 bash -n 脚本文件 :测试脚本文件中出现的语法问题 也可以给予脚本文件可执行权限,并加入环境变量中,其脚本文件名即可直接执行
[root@localhost ~]# vim whd.sh #!/bin/bash #:这是一个最简单的脚本文件 sleep 1000 [root@localhost ~]# bash whd.sh
[root@localhost ~]# source whd.sh
3.2shell脚本设置本地yum仓库
[root@localhost ~]#vim yum.sh #!/bin/bash //第一行的#表示声明使用的时bash语法,后面的开头#表示注释 #这是一个安装本地yum仓库的脚本 #挂载光盘 mount /de0/sr0 /mnt #创建目录用作备份 mkdir /etc/yum.repos.d/bak mv /etc/yum.repos.d/* /etc/yum.repos.d/bak echo "[centos7] name=whd baseurl=file:///mnt enabled=1 gpgcheck=0" >> /etc/yum.repos.d/yum.repo #清理yum源 yum clean all #更新yum源 yum makecache #查看结果 yum repolist oot@localhost ~]# vim yum.sh [root@localhost ~]# bash yum.sh //执行shell脚本 mount: /dev/sr0 写保护,将以只读方式挂载 mkdir: 无法创建目录"/etc/yum.repos.d/bak": 文件已存在 mv: 无法将目录"/etc/yum.repos.d/bak" 移动至自身的子目录"/etc/yum.repos.d/bak/bak" 下 已加载插件:fastestmirror, langpacks 正在清理软件源: centos7 Cleaning up list of fastest mirrors 已加载插件:fastestmirror, langpacks Determining fastest mirrors centos7 | 3.6 kB 00:00:00 (1/4): centos7/group_gz | 166 kB 00:00:00 (2/4): centos7/filelists_db | 3.2 MB 00:00:00 (3/4): centos7/primary_db | 3.1 MB 00:00:00 (4/4): centos7/other_db | 1.3 MB 00:00:00 元数据缓存已建立 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile 源标识 源名称 状态 centos7 whd 4,021 repolist: 4,021
3.3下载服务器的shell脚本
[root@localhost ~]# vim server.sh #!/bin/bash #这是一个下载各种服务的脚本 read -p "请输入服务名:" soft yum install -y $soft ~ [root@localhost ~]# bash server.sh 请输入服务名:httpd 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirrors.ustc.edu.cn * extras: mirrors.ustc.edu.cn * updates: mirrors.ustc.edu.cn 软件包 httpd-2.4.6-97.el7.centos.x86_64 已安装并且是最新版本
3.4创建新用户并基于密码
[root@localhost ~]# vim user.sh #!/bin/bash #这是一个新建用户的脚本 read -p "请输入客户名:" username read -p "请输入密码:" pass useradd $username echo "$pass" | passed --stdin $username id $username [root@localhost ~]# bash user.sh 请输入客户名:lisi 请输入密码:123 更改用户 lisi 的密码 。 passwd:所有的身份验证令牌已经成功更新。 uid=1002(lisi) gid=1002(lisi) 组=1002(lisi)
3.5shell脚本小练习
echo -n :不换行显示 echo -e :转义作用 echo -e “hello\c” :不换行显示 echo -e “hello\n” :换行显示并加一行回车 echo -e “\e[33mhello\e[0m” :变色显示
[root@localhost ~]# vim table.sh #!/bin/bash name=`whoami` d=`pwd` c=`hostname` time=`date +%Y-%m-%d\ %H:%M:%S` pid=`ps -ef | wc -l` user=`users | wc -w` echo "-----------------------------------------------------------------" echo "# System Info Table #" echo "# 当前登陆用户为:$name #" echo "# 当前登录目录为:$d #" echo "# 当前登录主机为:$c #" echo "# 当前系统时间为:$time #" echo "# 当前系统运行的进程数为:$pid #" echo "# 当前系统登录的用户数为:$user #" echo "# 任何问题请联系:110 #" echo "-----------------------------------------------------------------"
设置文字变色
第一种方法:
[root@localhost ~]# vim table.sh #!/bin/bash name=`whoami` d=`pwd` c=`hostname` time=`date +%Y-%m-%d\ %H:%M:%S` pid=`ps -ef | wc -l` user=`users | wc -w` echo -e "-----------------------------------------------------------------\e[2;70H" echo -e "\e[1;32m# System Info Table \e[3;70H#\e[0m" echo -e "\e[1;31m# 当前登陆用户为:$name \e[4;70H#\e[0m" echo -e "\e[1;33m# 当前登录目录为:$d \e[5;70H#\e[0m" echo -e "\e[1;34m# 当前登录主机为:$c \e[6;70H#\e[0m" echo -e "\e[1;35m# 当前系统时间为:$time \e[7;70H#\e[0m" echo -e "\e[1;36m# 当前系统运行的进程数为:$pid \e[8;70H#\e[0m" echo -e "\e[1;37m# 当前系统登录的用户数为:$user \e[9;70H#\e[0m" echo -e "\e[1;31m# 任何问题请联系:110 \e[10;70H#\e[0m" echo -e "-----------------------------------------------------------------\e[11;70H"
设置完先清屏
第二种方法:
这篇关于Shell脚本--变量(后附简单shell脚本练习)!的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-19永别了,微服务架构!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?