shell编程入门 第一章 基本语法

shell编程的语法主要分为五个环节,分别是变量,字符串,运算符,流程控制,函数五大部分


shell编程的基础语法

  • 一 变量
    • 1.1 shell变量名
    • 1.2 使用shell变量
    • 1.3只读变量
    • 1.4 删除变量
  • 二 字符串
    • 2.1 定义时最好用双引号
    • 2.2获取字符串长度
    • 2.3提取子字符串
    • 2.4 查找子字符串
  • 三 运算符
    • 3.1算数运算符
    • 3.2 关系运算符
      • 3.2.1 数字之间的关系
      • 3.2.2 文件权限
  • 四 流程控制
    • 4.1 if判定
    • 4.2 case语句
    • 4.3 for循环
    • 4.4 while循环
  • 五 函数
    • 5.1 函数基础
    • 5.2 自动化监视脚本

一 变量

1.1 shell变量名

1. 变量名中不能用$(这个符号在shell中表示引用)
2. 变量名和等号之间不能有空格

username="张三"

3. 可以使用字母数字下划线,但是首字母不能以下划线开头
4. 不能使用bash里的关键字
5. 不能使用标点符号,中间不能有空格

1.2 使用shell变量

使用一个定义过的shell变量,在变量名的前面加上$

yourname=zhangsan
myname=lisi
echo $yourname
echo ${yourname}
# 加花括号可以识别变量边界

1.3只读变量

只读变量和Java里的常量很像,定义了之后,这个变量不能随便被赋值,或者被unset删除

readonly yourname

1.4 删除变量

只读变量不能山,普通变量可以删

unset myname

二 字符串

2.1 定义时最好用双引号

  1. 单引号转义时存在无法识别的问题,单引号中任何字符都会原样输出
#!/bin/bash
skill='java'
str='I am good at $skill'
echo $str

运行结果:

I am good at $skill
  1. 双引号里可以有变量,可以有转义字符
 #!/bin/bash
skill='java'
str="I am good at $skill"
echo $str

运行
[root@localhost test]# sed -i ‘s/\r$//’ test1.sh
[root@localhost test]# ./test1.sh
I am good at java

2.2获取字符串长度

shell代码

#!/bin/bash
skill='java'
echo ${skill}
echo ${#skill}

输出结果
[root@localhost test]# sed -i ‘s/\r$//’ test1.sh
[root@localhost test]# ./test1.sh
java
4

2.3提取子字符串

shell代码

#!/bin/bash
skill='I like Java'
echo ${skill:2}   
#substring(2)
#从第二个字符开始截取
echo ${skill:2:2}
#substring(2,2)
#从索引2处开始截取两个字符

输出结果
[root@localhost test]# sed -i ‘s/\r$//’ test1.sh
[root@localhost test]# ./test1.sh
kike Java
ki

2.4 查找子字符串

查找like字符串中字符i所在的位置
shell代码

#!/bin/bash
skill='like'
echo `expr index "$skill" i`

[root@localhost test]# sed -i ‘s/\r$//’ test1.sh
[root@localhost test]# ./test1.sh
2

三 运算符

虽然原生bash不支持数学运算,但是可以通过expr来实现
使用有两个个原则

  • 表达式和运算符之间要有空格
  • 完整的表达式要被飘号包含,飘号的位置在esc键的下边

3.1算数运算符

可以看一下图中的示范脚本,加减乘除取余赋值,==,!=

#!/bin/bash
skill='like'
a=8
b=9
# 加法 +
echo ` expr $a + $b `
# 减法 -
echo ` expr $a - $b `
# 乘法 *
echo ` expr $a \* $b `
# 除法 /
echo ` expr $b / $b `
# 取余 %
echo ` expr $b % $a `


# 赋值 =
echo skill
echo  ` expr a=$b ` 
# 相等 == 返回值为true
#echo ` [ $a == $b ] `
# 不等 != 返回值为false 
#echo ` [ $a!= $b ] `

3.2 关系运算符

这个主要分为三个类型,一是数字之间的关系,二是文件权限的关系,三是文件类型之间的关系

3.2.1 数字之间的关系

-eq      (equal)        等于
-ne      (not equal)     不等于 
-lt      (less than)     少于
-le      (less equal)    少于等于
-gt     (greater than)  大于
-ge      (grater equal)  大于等于

3.2.2 文件权限

linux是一个多用户的系统,多用户要采用权限分段方式来执行指令,它用三组二进制数来表示一个文件的权限,如下图所示

  • 简写是从000到777 ,三个位置分别代表rwx,读写执行
  • 000 000 000 基本上什么操作都做不了
  • 111 111 111 所有权限都可以 最高777,意思是所有者,组,公共,都可以
    在这里插入图片描述

四 流程控制

4.1 if判定

#!/bin/bash

if [ "$1"x = "gu"x ]
then
	echo "welcome, gu"
fi

# 输入第二个参数,表示年龄,判断属于哪个年龄段
if [ $2 -lt 18 ]
then
	echo "未成年人"
elif [ $2 -lt 35 ]
then
	echo "青年人"
elif [ $2 -lt 60 ]
then
	echo "中年人"
else
	echo "老年人"
fi

4.2 case语句

#!/bin/bash

case $1 in
1)
	echo "one"
;;
2)
	echo "two"
;;
3)
	echo "three"
;;
*)
	echo "number else"
;;
esac

4.3 for循环

#!/bin/bash
for IP in `cat /root/for/ip.txt`    #ip文件为存放ip地址的
do
  ping -c 3 -i 0.2 -w 3 $IP &>/dev/null #-c 3 ping3次主机 -i 0.2ping主机间隔 -w 3ping主机超时间隔
  if [ $? -eq 0 ];then
  echo "host $IP is up"
  else echo "host $IP is down"
  fi
done

4.4 while循环

#!/bin/sh
counter=5
factorial=1
while [ $counter -gt 0 ]
do 
      factorial=$(( $factorial * $counter ))
      ((counter--))
done 
echo $factorial

五 函数

5.1 函数基础

sh文件

#!/bin/bash
# 定义函数
fun1 (){
   echo "这是一个函数"
}
#调用函数
fun1

运行过程
[root@localhost test]# sed -i ‘s/\r$//’ test2.sh
[root@localhost test]# ./test2.sh
这是一个函数

5.2 自动化监视脚本

流量检测

#!/bin/bash
NIC=$1
echo -e " In ------ Out"
while true; do
    OLD_IN=$(awk '$0~"'$NIC'"{print $2}' /proc/net/dev)
    OLD_OUT=$(awk '$0~"'$NIC'"{print $10}' /proc/net/dev)
    sleep 1
    NEW_IN=$(awk  '$0~"'$NIC'"{print $2}' /proc/net/dev)
    NEW_OUT=$(awk '$0~"'$NIC'"{print $10}' /proc/net/dev)
    IN=$(printf "%.1f%s" "$((($NEW_IN-$OLD_IN)/1024))" "KB/s")
    OUT=$(printf "%.1f%s" "$((($NEW_OUT-$OLD_OUT)/1024))" "KB/s")
    echo "$IN $OUT"
    sleep 1
done

服务器初始化

#/bin/bash
# 设置时区并同步时间
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
if ! crontab -l |grep ntpdate &>/dev/null ; then
    (echo "* 1 * * * ntpdate time.windows.com >/dev/null 2>&1";crontab -l) |crontab
fi
 
# 禁用selinux
sed -i '/SELINUX/{s/permissive/disabled/}' /etc/selinux/config
 
# 关闭防火墙
if egrep "7.[0-9]" /etc/redhat-release &>/dev/null; then
    systemctl stop firewalld
    systemctl disable firewalld
elif egrep "6.[0-9]" /etc/redhat-release &>/dev/null; then
    service iptables stop
    chkconfig iptables off
fi
 
# 历史命令显示操作时间
if ! grep HISTTIMEFORMAT /etc/bashrc; then
    echo 'export HISTTIMEFORMAT="%F %T `whoami` "' >> /etc/bashrc
fi
 
# SSH超时时间
if ! grep "TMOUT=600" /etc/profile &>/dev/null; then
    echo "export TMOUT=600" >> /etc/profile
fi
 
# 禁止root远程登录
sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
 
# 禁止定时任务向发送邮件
sed -i 's/^MAILTO=root/MAILTO=""/' /etc/crontab
 
# 设置最大打开文件数
if ! grep "* soft nofile 65535" /etc/security/limits.conf &>/dev/null; then
    cat >> /etc/security/limits.conf << EOF
    * soft nofile 65535
    * hard nofile 65535
EOF
fi
 
# 系统内核优化
cat >> /etc/sysctl.conf << EOF
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_tw_buckets = 20480
net.ipv4.tcp_max_syn_backlog = 20480
net.core.netdev_max_backlog = 262144
net.ipv4.tcp_fin_timeout = 20
EOF
 
# 减少SWAP使用
echo "0" > /proc/sys/vm/swappiness
 
# 安装系统性能分析工具及其他
yum install gcc make autoconf vim sysstat net-tools iostat if

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/13234.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Maven打包跳过测试的5种方式

Maven打包跳过测试的5种方式 1、命令行方式跳过测试 我们可以通过使用命令将项目打包&#xff0c;添加跳过测试的命令就可以了&#xff0c;可以用两种命令来跳过测试&#xff1a; -DskipTeststrue mvn package -DskipTeststrue-DskipTeststrue&#xff0c;不执行测试用例&a…

斩获“双金”!玻色量子在中国移动第七届创客马拉松大赛脱颖而出

​4月7日&#xff0c;中国移动第七届创客马拉松大赛总决赛在厦门圆满落幕。此次大赛以“能力无界 智算同行”为主题&#xff0c;经过近4000个创新项目的层层选拔&#xff0c;玻色量子凭借“相干量子计算设备”项目脱颖而出&#xff0c;成功摘取“双金”&#xff1a;总决赛全球通…

HttpServletRequest的介绍和方法以及代码实战

目录 HttpServletRequest HttpServletRequest 介绍 HttpServletRequest 常用方法 代码实战 HTML部分 Java部分 web.xml配置 请求转发 为什么需要请求转发 请求转发说明 请求转发原理示意图 代码实战 HTML部分 CheckServlet部分 ManageServlet 部分 xml部分 请求…

搭建静态网页

day3作业 请给openlab搭建web网站​ 网站需求&#xff1a;​ 1.基于域名[www.openlab.com](http://www.openlab.com)可以访问网站内容为 welcome to openlab!!!​ 2.给该公司创建三个子界面分别显示学生信息&#xff0c;教学资料和缴费网站&#xff0c;基于[www.openlab.com…

DHCP原理与配置

目录 一、DHCP工作原理 1&#xff09;了解DHCP服务 使用DHCP的好处 DHCP的分配方式 2&#xff09;DHCP的租约过程 分为四个步骤 二、DHCP服务器的配置 1&#xff09;检查并且安装dhcp有关软件包 2&#xff09;查看系统的配置文件&#xff0c;并且利用好官方给的参考案…

idea 配置docker 进行上传镜像,部署启动容器

前言 在我们开发测试过程中&#xff0c;需要频繁的更新docker镜像&#xff0c;然而默认情况下&#xff0c;docker的2375端口是关闭的&#xff0c;下面介绍如何打开端口。 修改docker配置文件 操作步骤&#xff1a; 1.1、修改配置 登录docker所在服务器&#xff0c;修改docker…

银行数字化转型导师坚鹏:银行数字化创新应用与案例分析

银行数字化创新应用与案例分析 课程背景&#xff1a; 很多银行存在以下问题&#xff1a; 不知道如何进行数字化创新&#xff1f; 不知道金融科技在银行业的重要应用&#xff1f; 不清楚银行同业的数字化创新有哪些案例&#xff1f; 课程特色&#xff1a; 用独特视角…

读 AI学者生存策略

链接&#xff1a;https://arxiv.org/pdf/2304.06035.pdf 作者&#xff1a;Julian Togelius and Georgios N. Yannakakis 随着大模型 和 大数据的出现&#xff0c; AI研究者 都会感到焦虑。 没有计算资源 &#xff0c;没有标注的人力&#xff0c;很难做出突破性的研究。即使很多…

百度发布Apollo城市智驾,距离AI智能驾驶还有多远?

推荐&#xff1a;将NSDT场景编辑器加入你的3D工具链。 工具集&#xff1a;NSDT简石数字孪生 随着人工智能技术的不断发展&#xff0c;智能驾驶已经成为了汽车行业的一个重要领域。智能驾驶可以减少人为驾驶的错误和疲劳驾驶等不安全因素&#xff0c;提高驾驶安全性&#xff0c…

【python中的多进程了解一下?】

基本说明 多进程是指在同一台计算机中同时运行多个独立的进程。每个进程都有自己的地址空间&#xff0c;可用于执行一些特定的任务。这些进程可以同时执行&#xff0c;从而提高了程序的性能和效率。多进程可以在多核计算机上实现真正的并行计算&#xff0c;可以同时运行多个程…

工程行业管理系统-专业的工程管理软件-提供一站式服务

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目显示…

RabbitMQ:消息中间件

文章目录 概念管理界面简介4中常见交换器类型1.Direct交换器:2.Fanout交换器3.Topic交换器4.headers交换器 对象类型消息传递同步等待使用代码创建队列待续...... 概念 在微服务架构中项目之间项目A调用项目B 项目B调用项目C项目C调用项目D。。 用户必须等待项目之间内容依次的…

Linux:centos:系统服务基础控制(systemctl)基础使用 图形化工具ntsysv使用

基础使用的办法为&#xff1a; systemctl控制类型服务名称 控制常用类型为一下几个 start 启动 stop 停止 enable 开机自启 disable 开机不自启 restart 重新启动 reload 重新加载 status 查看服务状态 systemc…

智加科技与舍弗勒签订商用车先进转向系统量产合作协议,将率先量产行业首个正向开发的智能重卡冗余转向

自动驾驶已经成为当前汽车行业的重要发展趋势之一。在此背景下&#xff0c;在2023上海国际汽车展期间&#xff0c;智加科技与舍弗勒集团签订量产合作协议&#xff0c;双方将在自动驾驶商用车先进转向系统领域展开合作&#xff0c;共同推动重卡自动驾驶的技术应用和创新发展。 图…

死锁---银行家算法例题

1、知识点 1.银行家算法使用的四个必要的数据结构是: 可用资源向量Available&#xff0c;最大需求矩阵Max&#xff0c;分配矩阵Allocation&#xff0c;需求矩阵Need。 2.银行家算法是不是破坏了产生死锁的必要条件来达到避免死锁的目的&#xff1f;若是&#xff0c;请简述破…

浅析商场智能导购系统功能与实施效益

商场智能导购系统是一种基于物联网技术和人工智能算法的解决方案&#xff0c;旨在提供商场内部的智能导购服务&#xff0c;为消费者提供个性化的购物导引和推荐&#xff0c;提升用户购物体验&#xff0c;增加商场的客流量和销售额。 商场智能导购系统的方案一般包括以下主要功能…

初识 MongoDB

文章目录 一、简介二、体系结构三、数据类型四、特点五、应用场景 提示&#xff1a;以下是本篇文章正文内容&#xff0c;MongoDB 系列学习将会持续更新 一、简介 MongoDB 是一个文档数据库&#xff0c;是由字段和值对&#xff08;field:value&#xff09;组成的数据结构&…

同态随机基加密的量子多方密码-数学公式

众所周知&#xff0c;信息和信息处理的完全量子理论提供了诸多好处&#xff0c;其中包括一种基于基础物理的安全密码学&#xff0c;以及一种实现量子计算机的合理希望&#xff0c;这种计算机可以加速某些数学问题的解决。这些好处来自于独特的量子特性&#xff0c;如叠加、纠缠…

第一节 法学

目录 法学的概念法学的性质 实践性构成了法学的学问性质 法学的研究对象 1.法律制度问题&#xff08;X法律制度&#xff09;2. 社会现实或社会生活关系问题 (Y社会现实/社会关系)3.法律制度与社会现实之间如何对应的问题 &#xff08;Yf(x) f为什么函数&#xff09; 法学的概…

耗时半月,终于把牛客网上的软件测试面试八股文整理成了PDF合集(测试基础+linux+MySQL+接口测试+自动化测试+测试框架+jmeter测试+测试开发)

大家好&#xff0c;最近有不少小伙伴在后台留言&#xff0c;近期的面试越来越难了&#xff0c;要背的八股文越来越多了&#xff0c;考察得越来越细&#xff0c;越来越底层&#xff0c;明摆着就是想让我们徒手造航母嘛&#xff01;实在是太为难我们这些程序员了。 这不&#xf…
最新文章