首页 > 其他分享 >C高级学习笔记

C高级学习笔记

时间:2024-11-22 14:44:13浏览次数:3  
标签:文件 测试 高级 笔记 echo 学习 命令 FILE test

……接上文

shell中的语句

功能性语句

  1. test

test 语句可以测试三种对象:

字符串 整数 文件属性

每种测试对象都有若干测试操作符

3.1. 字符串测试

s1 = s2 测试两个字符串的内容是否完全一样

test "hello" = "world"
echo $?        # 1 相等为真,不想等为假

s1 != s2 测试两个字符串的内容是否有差异

test "hello" != "world"
echo $?        # 0 相等为假,不相等为真

-z s1 测试字符串的长度为0

test -z ""
echo $?        # 0 字符串没有长度,则为真
test -z "hello"
echo $?        # 1 字符串有长度,则为假

-n s1 测试字符串的长度不为0

test -n ""
echo $?        # 1 字符串没有长度,则为假
test -n "hello"
echo $?        # 0 字符串有长度,则为真

3.2. 整数的测试:

a -eq b 测试a和b是否相等 equal

read A B
test $A -eq $B
echo $?        # 如果两个数相等则为真,反之为假

a -ne b 测试a和b是否不相等 not equal

read A B
test $A -ne $B
echo $?        # 如果两个数不相等则为真,反之为假

a -gt b 测试a是否大于b greater than

read A B
test $A -gt $B
echo $?        # 如果a大于b则为真,反之为假

a -ge b 测试a是否大于等于b greater equal than

read A B
test $A -ge $B
echo $?        # 如果a大于等于b则为真,反之为假

a -lt b 测试a是否小于b less than

read A B
test $A -lt $B
echo $?        # 如果a小于b则为真,反之为假

a -le b 测试a是否小于等于b less equal than

read A B
test $A -le $B
echo $?        # 如果a小于等于b则为真,反之为假

3.3. 文件属性

-d name 测试name是否为一个目录

read FILE
test -d $FILE
echo $?        # 如果name是目录则为真,反之为假

-f name 测试name是否为一个普通文件

read FILE
test -f $FILE
echo $?        # 如果name是普通文件则为真,反之为假

-e name 测试name是否存在

read FILE
test -e $FILE
echo $?        # 如果文件或目录存在则为真,反之为假

补充:

FILE1 -nt FILE2:1的时间戳比2的更新
FILE1 -ot FILE2:1的时间戳比2的更旧
-b FILE:文件存在且是一个块设备文件
-c FILE:文件存在且是一个字符设备文件
-d FILE:文件存在且是一个目录设备文件
-f FILE:文件存在且是一个普通文件
-e FILE:文件存在
-h 或者 -L FILE:文件存在且为软链接文件
-s FILE:文件存在且大小不为0
-S FILE:文件存在且是一个套接字文件
-p FILE:文件存在且是一个管道文件
-w FILE:文件存在且有可写权限
-r FILE:文件存在且有可读权限
-x FILE:文件存在且有可执行权限

结构性语句

if .. then .. fi

  1. 基本结构

if 表达式
then
    命令表
fi

  1. 分层结构

if 表达式
then
    命令表1
else
    命令表2
fi

  1. 嵌套结构

if 表达式
then
    if 表达式
    then
        命令表
    fi
else
    命令表
fi

可以使用 [] 将test省略,[]本质上是一个test命令

  1. elif

if 表达式1
then
    命令表1
elif 表达式2
then
    命令表2
...
else
    命令表n
fi

case语句

case 变量 in
模式1)
    命令表1
    ;;
模式2)
    命令表2
    ;;
...
*)
    命令表n
    ;;
esac

工作方式:
    取值后面必须为关键字 in ,每一个模式必须以右括号结束。
    取值可以为变量或者常量,取值检测匹配的每一个模式
    一旦模式匹配,其间所有命令开始执行直至 ;;
    执行完匹配模式相应的命令不会再继续匹配其他的模式
    如果无一匹配模式,使用 * 号捕获该值

练习:学生成绩管理系统,用shell中的case实现

90-100:A

80-89:B

70-79:C

60-69:D

<60:不及格

for循环

for 变量名 in 单词表
do
    命令表
done

执行顺序:
变量依次取单词表中的各个单词,  每取一次单词, 就执行一次循环体中的命令.  循环次数由单词表中的单词数确定. 命令表中的命令可以是一条, 也可以是由分号或换行符分开的多条。

示例:

#!/bin/bash

for I in 1 2 3 4 5
do
    echo $I
done

for语句的几种书写格式
  1. for i in 1 2 3 4 do ... done

变量i从单词表中取值

  1. for i do ... done

变量i从命令行取值,可以省略in单词表

  1. for in {1..10} do ... done

变量i从1-10中依次取值

  1. for (( i = 0; i < 10; i++ )) do .. done

书写格式类似于C语言

可以取到当前目录下所有的文件或者目录

练习:

1、终端输入行数,打印直角三角形

*

**

***

·····

while循环

while 命令或表达式
do
    命令表
done

执行顺序:
while语句首先测试其后的命令或表达式的值,如果为真,就执行一次循环体中的命令,然后再测试该命令或表达式的值,执行循环体,直到该命令或表达式为假时退出循环。

循环控制语句

break n :结束n层循环

continue n :跳过n层的本次循环

#!/bin/bash

for (( i = 1; i <= 5; i++ ))
do
    for (( j = 1; j <= 5; j++ ))
    do
        if [ $j -eq 3 ]
        then 
            # break 1
            # break 2
            # continue 1
            continue 2
        fi
        echo "$i:$j"
    done
done
                                                                           未完待续……

标签:文件,测试,高级,笔记,echo,学习,命令,FILE,test
From: https://blog.csdn.net/m0_64412253/article/details/143952074

相关文章

  • 学习Python Day8
    1.列表1.1优点可以存储多个数据,且可以是不同数据类型1.2常用操作1.2.1查找1.2.1.1下标list1=['apple','orange','banana']print(list1[0])print(list1[1])print(list1[2])1.2.1.2函数index():返回数据的下标,如果不存在,则报错list1=['apple','orange'......
  • .Net-Avalonia学习笔记(十)-Material.Avalonia
     Add Material.Avalonia nugetpackagetoyourproject:dotnetaddpackageMaterial.AvaloniaEdit App.xaml file:<Application...xmlns:themes="clr-namespace:Material.Styles.Themes;assembly=Material.Styles"...><Application......
  • 网络安全的学习路线
    网络安全主要分别以下几种:1 web安全2系统安全3二进制逆向  4红蓝对抗 5 密码学 6AI安全7移动(ios,Anroid)安全1 web安全:其中sqlxsscsrf是网络安全人员的基本知识。DDoS攻击已经是古老的网络攻击。TCP,DNS劫持,是计算机网络2系统安全:栈溢......
  • [笔记]PN结二极管(1)
    文章目录PN结二极管(1)1、PN结二极管基本结构与工艺PN结2、PN结耗尽区理论PN结内建电势PN结偏置势垒(耗尽层)电容单边突变结线性缓变结PN结二极管(1)1、PN结二极管基本结构与工艺PN结PN结:p型半导体与n半导体紧密接触形成的冶金结。......
  • 强化学习算法(PPO算法)—机器人AI控制算法
    相关:https://github.com/google/brax/tree/main看到一个推特:这里分享了一个网友编写的pytorch版本的PPO算法,因为我一直觉得只有工业界采用的PPO算法编写的那个水平才比较靠谱,因此个人编写的RL算法我是比较少看的,不过发现这个实现比较简练,感觉这个入门学习还是不错的,于是本文......
  • Maven笔记
     什么是MavenMaven的概念Maven是自动化构建工具。Maven是Apache软件基金会组织维护的一款自动化构建工具,专注服务于Java平台的项目构建和依赖管理。Maven这个单词的本意是:专家,内行。Maven是目前最流行的自动化构建工具,对于生产环境下多框架、多模块整合开发有重要作......
  • YOLOv8车牌识别系统 深度学习 LPRNet算法 pytorch 大数据 毕业设计(源码)✅
    YOLOv8车牌识别系统深度学习LPRNet算法pytorch大数据毕业设计(源码)✅1、项目介绍技术栈:Python3.8YOLOv8深度学习LPRNet算法pytorch2、项目界面(1)上传图片进行车牌识别(2)上传图片进行车牌识别2(3)多车牌号码进行车牌识别(4)上传视频进行车牌识别实时检测(5)连接......
  • LSTM (长短期记忆网络 - 基于RNN - 比GRU老20年 - 体现注意力的思想) + 代码实现 ——
    目录0.前言1.门控记忆元1.1输入门、遗忘门和输出门1.2候选记忆元 1.3记忆元(C)1.4隐状态(H)2.从零开始实现2.1初始化模型参数2.2定义模型2.3 训练和预测3.简洁实现4.小结0.前言课程全部代码(pytorch版)已上传到附件看懂上上篇RNN的所有细节、上......
  • sql注入--学习笔记_1
    实验室sqlsql可以对数据库进行访问和处理:取回数据,删除数据。web页面会使用这些。SQL能做什么?SQL面向数据库执行查询SQL可从数据库取回数据SQL可在数据库中插入新的记录SQL可更新数据库中的数据SQL可从数据库删除记录SQL可创建新数据库SQL可在数据库中创建新表......
  • 工作学习笔记(十四)“无法自动装配,未找到‘XXXXXXX’类型的 Bean”
    经常会遇到“无法自动装配,未找到‘XXXXXXX’类型的Bean”这种问题。经过上网一番查找,总结出以下原因:相关类没有被Spring管理原因:Spring的自动装配依赖于将类注册为Spring容器中的Bean,只有成为Bean,Spring才能够在需要注入的地方自动装配它。如果你的XXXXXXX类没有......