当前位置: 首页 > article >正文

shell脚本的【算数运算、分支结构、test表达式】

1.思维导图 

2.test表达式

2.1 格式

shell中的单分支
if [ test语句 ];then    ----> if test 表达式;then
    test语句成立执行的语句块
fi
if [ test语句 ]      ----> if test 表达式
then
    test语句成立执行的语句块
fi

双分支
if [ test语句 ]
then
    test语句成立执行的语句块
else
    test语句不成立执行的语句块
fi

多分支
if [ test语句1 ]
then
    test语句1成立执行的语句块
elif [ test语句2 ]
then
    test语句1不成立,但test语句2成立执行阿语句块
fi

嵌套if
if [ test语句1 ]
then
    test语句1成立执行的语句块
    if [ test语句2 ]
    then
        test语句1和test语句2都成立执行的语句块
    fi
fi

2.2 test表达式

2.2.1 整数判断

判断平年闰年
#!/bin/bash

read -p "Enter a year: " year

if [ $((year%4)) -eq 0 ]  &&  [ $((year%100)) -ne 0 ] || [ $((year%400)) -eq 0 ]; 
then
    echo "$year  闰年"
else
    echo "$year 平年"
fi

2.2.2字符串判断

str1=h
str2=w
if [ $str1 = $str2 ] #判断两个字符串是否相等
then
    echo str1==str2
elif [ $str1 != $str2 ] #判断两个字符串是否不相等
then
    echo str1!=str2

2.2.3文件判断 

输入一个脚本名,判断该脚本是否存在,如果存在判断是否有可执行权限,如果有执行脚本,如果没有添加可执行权限再执行脚本

#!/bin/bash
read -p "enter name of shell"  shell
if [ -e "./$shell" ]
then
	echo "$shell exist"
	if [ -x "./$shell" ]
	then 
		bash $shell
	else
		echo "$shell not executable"
		chmod a+x "./$shell"
		bash $shell
	fi
fi

 3.作业

1..终端输入一个C源文件名(.c结尾)判断文件是否有内容,如果没有内容删除文件,如果有内容
编译并执行改文件

read -p "Enter C file : " cfile

# 检查文件是否存在且是 .c 文件
if [[ -e "$cfile" && "$cfile" == *.c ]]; then
    # 检查文件是否有内容
    if [ ! -s "$cfile" ]; then
        echo "$cfile is empty, deleting the file"
        rm "$cfile"
    else
        echo "$cfile has content, compiling"
        # 编译 C 文件,生成默认的 a.out
        gcc "$cfile"
        
        # 检查是否生成了目标文件 a.out
        if [ -f "a.out" ]; then
            echo "Compilation successful. Running the program"
            ./a.out
        else
            echo "Compilation failed. No a.out file "
        fi
    fi
else
    echo "The file does not exist or  not a .c file."
fi


2.终端输入两个文件名,判断哪个文件的时间戳更新。

# 提示用户输入两个文件名
read -p "enter the first file name: " file1
read -p "enter the second file name: " file2

# 检查文件是否存在
if [[ -e "$file1" && -e "$file2" ]]; then
    # 比较文件的时间戳
    if [ "$file1" -nt "$file2" ]; then
        echo "$file1 is new than $file2."
    elif [ "$file1" -ot "$file2" ]; then
        echo "$file2 is new  than $file1."
    else
        echo "same time."
    fi
else
    # 如果有任意一个文件不存在
    if [ ! -e "$file1" ]; then
        echo " $file1 not exist."
    fi
    if [ ! -e "$file2" ]; then
        echo " $file2 not exist."
    fi
fi


http://www.kler.cn/a/463227.html

相关文章:

  • 在 pandas.Grouper() 中,freq 参数用于指定时间频率,它定义了如何对时间序列数据进行分组。freq 的值可以是多种时间单位
  • 【pytorch】现代循环神经网络-2
  • Linux下部署ElasticSearch集群
  • AngularJS 过滤器:提升用户体验的数据处理利器
  • NSGA-II(非支配排序遗传算法II)详解与实现
  • MySQL 03 章——基本的SELECT语句
  • PHP:IntelliJ IDEA 配置 PHP 开发环境及导入PHP项目
  • OpenCV 特征检测和特征匹配方法汇总
  • 如何使用大语言模型进行事件抽取与关系抽取
  • smolagents:一个用于构建代理的简单库
  • SpringBoot教程(三十二) SpringBoot集成Skywalking链路跟踪
  • hhdb客户端介绍(65)
  • HT-HaiBOX边缘计算盒 智慧工厂方案,智慧医疗方案,智慧加油站方案,智慧安防方案,智慧城市方案;方案定制开发
  • Python编程实现“天天酷跑”小游戏(源码附上)
  • 基于单片机的野营自动感应灯系统(论文+源码)
  • 使用Wikitext2数据集对Llama-7B和Llama3-8B模型进行50%权重剪枝的一般步骤和可能的实现方式
  • 大数据技术-Hadoop(三)Mapreduce的介绍与使用
  • 【springboot yml配置】多环境切换
  • 使用 Certbot 快速为 hustoj 申请并自动配置免费 SSL 证书 自动续期
  • 在Ubuntu下通过Docker部署Mastodon服务器
  • 无人机激光信号传输原理!
  • 【漫话机器学习系列】028.CP
  • APM for Large Language Models
  • Unity Mesh生成Cube
  • Unable to locate package pcre-devel
  • 虚拟化服务器在云计算中起着什么作用?