Linux 学习记录38(C高级篇)

news/2024/10/26 15:17:09/

Linux 学习记录38(C高级篇)

在这里插入图片描述

本文目录

  • Linux 学习记录38(C高级篇)
  • 一、shell中的分支语句
    • 1. case...in语句
    • 2. shell中的通配符
  • 二、shell中的循环结构
    • 1. while循环
    • 2. shell中的printf
    • 3. for循环
      • (1. 类似C中的格式
      • (2. shell中的格式
      • (3. 连续列表
    • 4. select ...in 语句
    • 5. 辅助控制关键字
      • (1. break
      • (2. continue
  • 三、shell中的函数
    • 1. 格式
    • 2. 调用/获取参数
    • 3. 接收返回值
    • 4. 函数内使用local关键字
  • 思维导图

一、shell中的分支语句

1. case…in语句

格式:case $变量名 in 表示开始
表达式1)
代码块
;; 相当于C语言中的break 且不能省略*) 相当于default,*表示通配所有情况
代码块
;; 相当于C语言中的break 且不能省略,只有在最后一个分支才能省略esac 表示结束

*)的位置会影响case in 语句的执行效果

#!/bin/bash
case "$val" in表达式1)shell语句;; #break;表达式2)shell语句;; #break;*) #相当于shell语句;; #break;
esac
=================================
#!/bin/bash
read val
case "$val" in10)echo "10";; #break;20)echo "20";; #break;*)echo "*";; #break;
esac

2. shell中的通配符

* :通配一个或多个字符
? :通配一个字符
[] :通配[]内的一个字符
例:输入年和月份,判断该月有多少天,考虑润,平年
read -p "请输入year: " year
read -p "请输入month: " month
echo "--------------------"case "$month" in1|3|5|7|8|10|12)echo "day: 31";; #break;4|6|9|11)echo "day: 31";; #break;2)if [ $(($year%4)) -eq 0 -a $(($year%100)) -ne 0 -o $(($year%400)) -eq 0 ]thenecho "day: 28"elseecho "day: 29"fi;; #break;*) echo "error"
esac
判断输入的1个字符是数字,小写字母,大写字母和其他符号
#!/bin/bash
read -p "请输入1个字符: " -n 1 chcase "$ch" in[0-9])echo "是数字";;[[:upper:]])echo "是小写字母";;[[:lower:]])echo "是大写字母";;*)echo "是其他符号";;esac

二、shell中的循环结构

在shell中 [][[]]是有区别的1. [] 是test指令2. [[]] 只能被一些shell解析器识别3. []内使用逻辑与和逻辑或,需要使用-a和-o参数,[[]]内可以直接使用||&&4. []内如果不加"" 可能不能正确识别字符串范围,[[]]可以正确识别

1. while循环

格式:

while [ 表达式 ] ---------> while test 
do表达式成立执行的代码块
done
===========================================
#!/bin/bash
i=1
while [ $i -le 5 ]; doecho "hello world"((i++))
done

2. shell中的printf

printf "%d %d %d" $val1 $val1 $val1

3. for循环

(1. 类似C中的格式

for((表达式1;条件;表达式2))
do
done
===========================
#!/bin/bash
for((i=0;$i<5;((i++))))
doecho "hello world"
done

(2. shell中的格式

执行逻辑:

字符串列表在的是变量可能出现的所有情况,for循环执行的次数和字符串的个数有关,变量要顺序遍历结果字符串列表中的每一种情况,for循环才结束

for 变量名 in 字符串列表
do
代码块
done
=====================
for i in 1 2 3 4 5
doecho "hello world"
done

(3. 连续列表

=用以输出连续的序列=

指令
seq 1 2 100
1-起始值 可省略
2-间隔值 可省略
输出:以1开始2为间隔,到100的数
=============================
{1..100}
间隔固定为1,且只能用在for循环中in的后面
=============================
#!/bin/bash
for i in `seq 1 1 5`
doecho "hello world"
done
=============================
#!/bin/bash
for i in {1..5}
doecho "hello world"
done

4. select …in 语句

格式

select 变量名 in 选项列表
do循环体
done

例:

#!/bin/bash
select i in a b c d e f
do
echo $i
done

运行效果:
在这里插入图片描述
执行逻辑:

  1. select·.·in语句会列出选项列表,#?提示用户选择,如果用户不选择,再提示一次选项列表
  2. 选择时,选的是编号不是具体的内容

通常和case...in结合使用

例:

#!/bin/bash
select i in linux wins unix
docase $i in linux)echo "打开的是ubuntu系统";;wins)echo "打开的是wins系统";;unix)echo "打开的是unix系统"esac
done

5. 辅助控制关键字

break/continue

(1. break

break n #跳出n层循环

(2. continue

continue n #跳出n层循环本次循环

三、shell中的函数

1. 格式

格式:

function 函数名()
{函数体return 返回值
}

注意事项

  1. 函数头,没有返回值类型也没有形参列表
  2. 函数是否有返回值,根据函数具体实现来决定
  3. 函数是否有参数,根据调用时是否传参决定,函数头中的()内不能放任何内容
  4. function 可以加也可以不加
  5. shell中 函数的声明和定义不能分开

2. 调用/获取参数

调用:
函数名 参数1 参数2 参数3
函数结束参数和外部传参结束是一样的

#!/bin/bash
function fun()
{echo "$*"
}
fun 1 2 3 4 5 6

效果:
在这里插入图片描述

3. 接收返回值

  1. 使用命令置换符接收
    函数必须要有输出才能接收
#!/bin/bash
function fun()
{sum=$(($1+$2))echo $sum
}
ret=`fun 1 2 3 4 5 6`
echo $ret
  1. 使用$?接收
#!/bin/bash
function fun()
{sum=$(($1+$2))return $sum
}
fun 1 2 3 4 5 6
ret=$? #$?用于接收上一条指令的结果
echo $ret

4. 函数内使用local关键字

function fun()
{local sum=$(($1+$2))unset sum #清空局部变量return $sum
}

思维导图

在这里插入图片描述


http://www.ppmy.cn/news/527919.html

相关文章

【Red Hat 7.9---详细安装Oracle 11g】---静默方式安装

【Red Hat 7.9---详细安装Oracle 11g】---静默方式安装 &#x1f53b; 一、安装前规划&#x1f53b; 二、安装前准备一&#xff08;系统参数修改&#xff09;⛳ 2.1 内核版本、系统版本查看⛳ 2.2 修改主机名-重启生效⛳ 2.3 关闭selinux⛳ 2.4 防火墙设置1521端口开放⛳ 2.5 系…

2021电工杯数学建模B题解题思路(光伏建筑一体化板块指数发展趋势分析及预测)

目录 一、前言 二、问题背景 三、具体问题 四、解题思路 &#xff08;一&#xff09;整体思路 &#xff08;二&#xff09;问题一 &#xff08;三&#xff09;问题二 &#xff08;四&#xff09;问题三 &#xff08;五&#xff09;问题四 &#xff08;六&#xff09;…

ubuntu20下yolov4训练多目标实战

1、安装nvidia驱动和cudnn,不熟悉的小伙伴请移步&#xff1a;Ubuntu20.04安装NVIDIA显卡驱动、CUDA、CUDNN及突破NVENC并发限制_ubuntu20.04安装显卡驱动_BetterJason的博客-CSDN博客 2、编译opencv&#xff0c;不熟悉的小伙伴请移步:ubuntu20.04 和centos8平台opencv4.5.3&am…

Fateboard界面进不去

尝试了很多办法&#xff0c;在浏览器输入虚拟机IP&#xff1a;8080&#xff0c;localhost:8080都进不去 后来灵光一闪&#xff0c;发现fateboard没有启动&#xff0c;然后启动就可以啦 在浏览器输入虚拟机IP:8080

echarts官网进不去,处理DNS了还是进不去

最近我的谷歌浏览器进不去echarts官网,按照网上的方法处理了DNS缓存,也还是进不去,这时候只需要把电脑连接的网络从WiFi换成手机热点即可,具体啥原因还不太明白!

vulfocus靶场进不去

docker是开启的&#xff0c;运行vulfocus的指令也没问题&#xff0c;ip&#xff0c;id都是正确的。但主机连接的时候就是失败。尝试手动关闭防火墙&#xff0c;发现连接成功。

英伟达账户一直登陆不进去解决办法

浏览器报错信息&#xff0c;验证程序加载失败,请检查您的浏览器设置,例如广告拦截程序 操作办法: 1. 然后改DNS——控制面板——网络和共享中心——更改适配器设置——找到当前连的网(无线或者以太)——右键属性——网络选项卡找到“Internet 协议版本4 (TCP / IPv4)”双击或 …

神佑释放服务器正在维护,神佑释放进不去怎么回事 服务器进不去解决办法分享...

导 读 神佑释放进不去咋回事&#xff0c;目前游戏进入了公测阶段了&#xff0c;为什么进不去&#xff0c;还出现了派对情况&#xff0c;但是最后还是失败了&#xff0c;为什么出现这样的问题&#xff0c;下面就来介绍下神佑释放进不去为什么。 神佑释放进不去解决方法 1、... 神…