C高级day4(shell脚本)

news2024/10/6 16:28:39

一、Xmind整理:

二、上课笔记整理:

1.创建一个文件,给组用户可读权限,所属用户可写权限,其他用户可执行权限,使用if判断文件有哪些权限

#!/bin/bash
touch 1
chmod 241 1
if [ -r 1 ]
then
    echo "文件1有可读权限"
fi
if [ -w 1 ]
then
    echo "文件1有可写权限"
fi
if [ -x 1 ]
then
    echo "文件1有可可执行权限"
fi

2.终端输入年份,判断闰平年(四年一闰,百年不闰,四百年再闰) 

#!/bin/bash
read -p "请输入一个年份" year

#对年份的判断
#year对4\100和400取余都是算术运算,需要借助于(())\$[]\let\expr
#test指令内不能使用&&和||进行运算,test提供了-a进行逻辑与,-o进行逻辑或
if [ $((year%4)) -eq 0 -a $((year%100)) -ne 0 -o $((year%400)) -eq 0 ]
#if [ $((year%4)) -eq 0 ] && [ $((year%100)) -ne 0 ]  || [ $((year%400)) -eq 0 ]
#if [ $((year%4==0&&year%100!=0||year%400==0)) -eq 1 ]
then
    echo "$year是一个闰年"
else
    echo "$year不是一个闰年"
fi

3.终端输入一个.sh文件名,判断文件是否存在,如果存在判断文件是否有可执行权限,如果有执行脚本,如果没有添加可执行权限,如果文件不存在,创建脚本文件 

#!/bin/bash
read -p "请输入.sh文件" var
if [ -e "$var" ]
then
    echo "文件存在"
     if [ -x "$var" ]
     then
      bash $var
else 
         chmod 777 $var
fi
else
    echo"文件不存在"
    touch $var
fi

4.终端输入一个.c文件名,判断文件中是否有内容,如果有内容编译该文件,如果没有内容删除文件 

#!/bin/bash
read -p "请输入一个.c文件" filename
if [ -s $filename ]   #判断文件是否存在且有内容
then
    gcc $filename
else
    if [ -e $filename ]   #如果文件存在
    then
        rm $filename
        echo "$filename已删除"
    else 
        echo "$filename不存在"
    fi
fi

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

#!/bin/bash
read -p "请输入两个文件名"  filename1 filename2
if [ $filename1 -nt $filename2 ]
    #如果条件成立,-nt参数表示前面文件的时间戳更新
then
    echo "$filename1更新"
else
    echo "$filename2更新"
fi

6.终端输入学生成绩,判断等级100-90A,90-80B,80-70C,70-60D,其他不及格 

#!/bin/bash
read -p "请输入成绩" score
ret=$((score/10))
: 'case $score in
    1??|9?)
        echo "A"
        ;;
    8?)
        echo "B"
        ;;
    7?)
        echo "C"
        ;;
    6?)
        echo "D"
        ;;
    *)
        echo "不及格"
esac'

case $ret in
    10|9)
        echo "A"
        ;;
    8)
        echo B
        ;;
    7)
        echo C
        ;;
    6)
        echo D
        ;;
    *)
        echo "不及格"
esac

 7.终端输入一个字符,判断是字母还是数字字符

read -p "请输入一个字符" var
case $var in
    [0-9])
        echo "是一个数字"
        ;;
    [A-Z]|[a-z])
        echo "是一个字母"
        ;;
    *)
        echo 不是数字也不是字母
esac    

8.求1-100的和,5050 

#!/bin/bash
read -p "please input a num:" num
i=1
sum=0
while [ $i -le $num ]
do
	sum=$((sum+i))
	i=$((i+1))
done

9.终端输入数组,使用while循环,实现数组中元素的求和 

#!/bin/bash
read -p "请输入数组" -a arr
i=0
sum=0
while [ $i -lt ${#arr[*]} ]
do
	((sum += ${arr[i]}))
	((i++))
done
echo $sum

10.终端输入行数,打印直角三角形 

#!/bin/bash
read -p "请输入行数" line
i=1
j=1
while [ $i -le $line ]
do
    j=1    #每一次进入内层循环前j都从1开始
    while [ $j -le $i ]
    do
        echo -n "*"
        ((j++))
    done
    echo ""   #每行输出结束需要换行
    ((i++))
done

 11.求100-1000内的水仙花数

#!/bin/bash
for i in {100..999}
do
    bai=$(($i/100))
    shi=$(($i/10%10))
    ge=$(($i%10))
    if test $(($[$bai**3] + $[$shi**3] + $[$ge**3])) -eq $i
    then 
        echo  $i
    fi
done

12.定义一个稀疏数组,求数组中元素的和

arr=([0]=12 [5]=78 [7]=23)
sum=0
for j in ${arr[*]}
do
    ((sum+=j))
done
echo $sum

13.求家目录下目录文件和普通文件个数的和

#!/bin/bash
fnum=0
dnum=0
for i in `ls ~`
do
    if [ -d ~/$i ]
    then
        ((dnum++))
    fi
    if [ -f ~/$i ]
    then
        ((fnum++))
    fi
done
echo $((dnum+fnum))

 
  
#!/bin/bash
#var1和var2都是软连接文件
var1=2
var2=test1
#对软连接文件判断是,实际是在判断源文件
if [ -f $var1 ]
then
    echo "$var1是一个普通文件"
fi

if [ -d  $var2 ]
then
    echo "$var2是一个目录文件"
fi   

14.select···in和case···in结合

#!/bin/bash 

#select```in和case ```in结合
#可以通过用户的不同选择执行不同的指令
select i in linux wins macos q Q
do
    case $i in
        linux)
            echo "打开的是Linux系统"
            ;;
        wins)
            echo "打开的是wins系统"
            ;;
        macos)
            echo "打开的是macos系统"
            ;;
        q)
            break
            ;;
        Q)
            exit
            ;;
        *)
            echo "选择错误"
    esac
done

echo hello world

15.终端输入一个游戏名,让用户选择是否下载,如果用户选择的是Y|YES|y|yes就下载该游戏,N|NO|n|no就不下载该游戏。

#!/bin/bash
read -p "请输入游戏名" gname

select i in Y YES y yes N NO n NO
do
    case $i in 
        Y|YES|y|yes)
            echo "下载$gname"
            ;;
        N|NO|n|no)
            echo "不下载$gname"
            exit
    esac
done

 16.辅助控制关键字

#!/bin/bash
for((i=1;i<3;i++))
do
    echo "进入第一层循环 i=$i*******************"
    echo 
    for j in `seq 1 1 2`
    do
        echo "进入第二层循环 j=$j------------------"
        echo 

        for k in {1..3}
        do
            echo "进入第三层循环 k=$k /"
            echo 

            if [ $k -eq 2 ]
            then
                echo "准备跳出循环"
                #break 3 
                continue 3  
            fi

            echo "退出第三层循环 k=$k/"
            echo 
        done
        echo "退出第二层循环 j=$j------------------"
        echo 
    done
    echo "退出第一层循环 i=$i*******************"
    echo 
done

 17.获取函数的返回值

#!/bin/bash
function fun()
{
    echo hello world
}

function add()
{
    echo $(($1+$2))
    echo $0
    a=258
    return $a   #返回值只能返回0-255之中的数
}
add 12 34 
var=$?   #使用$?接收函数的返回值
echo $var
echo $a

 18.没有返回值的函数怎么接收结果

#!/bin/bash
function fun()
{
    echo hello world
}

a=90
function add()
{
    #echo $(($1+$2))
    #echo $0
    a=258
    return $a   #返回值只能返回0-255之中的数
}
: 'add 12 34 
var=$?   #使用$?接收函数的返回值
echo $var
echo $a  #可以访问a的值,a是一个全局变量
'
#如何接受fun函数的结果
ret=`fun`
echo $ret   #代码只有1行输出,fun中的输出已经被命令置换符接收了
add 
echo $a     #258,因为a在函数内被改变了

 19.local在函数中的使用

#!/bin/bash
function fun()
{
    echo hello world
}

a=90
function add()
{
    #echo $(($1+$2))
    #echo $0
    a=258
    local b=80   #被定义成了一个局部变量
    echo $b
    unset b     #unset是可以清空局部变量
    echo $b

    return $a   #返回值只能返回0-255之中的数
}
: 'add 12 34 
var=$?   #使用$?接收函数的返回值
echo $var
echo $a  #可以访问a的值,a是一个全局变量
'
#如何接受fun函数的结果
ret=`fun`
echo $ret   #代码只有1行输出,fun中的输出已经被命令置换符接收了
add 
echo $a     #258,因为a在函数内被改变了
echo $b     #空行,因为b在函数内是一个loacl类型的变量,局部变量

三、课后作业:

1.实现一个对数组求和的函数,数组通过实参传递给函数

num=0
read -p "请输入一组数据:" -a arr
function add()
{
	for ((i=0; i<${#arr[*]}; i++))
	do 
		((num+=arr[i]))
	done
	return $num
}
add ${arr[*]}
echo $?

2.写一个函数,输出当前用户的uid和gid,并使用变量接收结果

function fun()
{
	echo "uid:"`id -u`
	echo "gid:"`id -g`
	uid=`id -u`
	gid=`id -g`
}
fun
echo $uid
echo $gid

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为 DevOps 战士准备的 Linux 命令

点击链接了解详情 这篇文章将帮助理解DevOps工程师所需的大部分重要且经常使用的Linux命令。 要执行这些命令&#xff0c;你可以使用任何Linux机器、虚拟机或在线Linux终端来迅速开始使用这些命令。 系统信息命令&#xff1a; hostname - 显示系统主机的名称。 hostid - 显示…

openGauss学习笔记-66 openGauss 数据库管理-创建和管理schema

文章目录 openGauss学习笔记-66 openGauss 数据库管理-创建和管理schema66.1 背景信息66.2 注意事项66.3 操作步骤66.3.1 创建管理用户及权限schema66.3.2 使用schema66.3.3 schema的搜索路径66.3.4 schema的权限控制66.3.5 删除schema openGauss学习笔记-66 openGauss 数据库管…

Codeforces Round 827 (Div. 4) D 1e5+双重for循环技巧

Codeforces Round 827 (Div. 4) D 做题链接&#xff1a;Codeforces Round 827 (Div. 4) 给定一个由 n个正整数 a1,a2,…,an&#xff08;1≤ai≤1000&#xff09;组成的数组。求ij的最大值&#xff0c;使得ai和aj共质&#xff0c;否则−1&#xff0c;如果不存在这样的i&#…

github 创建自己的分支 并下载代码

github创建自己的分支 并下载代码 目录概述需求&#xff1a; 设计思路实现思路分析1.进入到master分支&#xff0c;git checkout master;2.master-slave的个人远程仓库3.爬虫调度器4.建立本地分支与个人远程分支之间的联系5.master 拓展实现 参考资料和推荐阅读 Survive by day…

Python基于Flask的招聘信息爬取、招聘信息可视化系统

招聘信息可视化系统 一、介绍 此系统是一个实时分析招聘信息的系统&#xff0c;应用Python爬虫、Flask框架、Echarts、VUE等技术实现。 二、系统运行图 1、数据概览 将爬取到的数据进行展示&#xff0c;点击公司信息和职位信息可以跳转到相应的网址&#xff0c;支持多条件…

这一次,我顿悟了

大家好&#xff0c;我是苍何。昨晚和编程导航 星球嘉宾也是我的引路人闫&#xff08;yn&#xff09; 小林大佬&#xff0c;畅聊了 4 个 小时&#xff0c;至今内心还是久久不能平静。 小林和我一样是跨界转行&#xff0c;他是医学院毕业&#xff0c;大二开始自学编程&#xff0…

【分布式】分布式事务:2PC

分布式事务的问题可以分为两部分&#xff1a; 并发控制 concurrency control原子提交 atomic commit 分布式事务问题的产生场景&#xff1a;一份数据被分片存在多台服务器上&#xff0c;那么每次事务处理都涉及到了多台机器。 可序列化&#xff08;并发控制&#xff09;&…

软件设计师学习笔记10-死锁资源数计算+进程资源图+段页式存储

目录 1.死锁资源数计算 1.1死锁 1.2进程管理与死锁资源的计算 2.进程资源图 3.段页式存储 3.1页式存储 3.1.1页式存储组织 3.1.2完整页表及页面淘汰原则 3.1.3页面置换算法(了解一下) 3.2段式存储 1.死锁资源数计算 1.1死锁 (1)死锁的概念&#xff1a;所谓死锁&…

C++-day4

仿照string类&#xff0c;完成myString 类 #include <iostream> #include <cstring> using namespace std; class myString { private:char *str; //记录c风格的字符串int size; //记录字符串的实际长度 public://无参构造myString():size(10…

mac 13.x 打开第三方应用,提示已损坏无法打开

前排提示&#xff0c;不一定有效 1、先在终端执行下面这个&#xff0c;因为要提权&#xff0c;输入自己的密码 sudo xattr -r -d com.apple.quarantine 具体应用 # 具体应用是一个路径&#xff0c;拖入 访达——应用程序——第三方应用 到终端就行 # sudo xattr -r -d com.app…

在Widows系统下载安装Ubuntu

1.下载VirtualBox Oracle VM VirtualBox 2.下载安装microsoft visual c 2019 进入百度&#xff1a;百度一下&#xff0c;你就知道 出现下面这个页面时&#xff0c;直接点击修复&#xff0c;点击修复后&#xff0c;出现【重新启动】按钮&#xff0c;点击【重新启动】&#xff…

微信小程序基础加强总结

本篇文章给大家带来了关于微信小程序的相关问题&#xff0c;其中主要介绍了一些基础内容&#xff0c;包括了自定义组件、样式隔离、数据、方法和属性等等内容&#xff0c;下面一起来看一下&#xff0c;希望对大家有帮助。 1、自定义组件 1.1、创建组件 在项目的根目录中&…

电机⽮量控制、直接转矩控制、参数辨识

直接转矩控制是一种控制异步电动机转矩的方式&#xff0c;其基本原理是测量和控制异步电动机定子电流矢量。在直接转矩控制中&#xff0c;定子磁链和转子磁链矢量可以表示为&#xff0c;并通过测量空间电角度的大小&#xff0c;来决定电磁转矩&#xff0c;进而实现直接转矩控制…

Java8实战-总结25

Java8实战-总结25 用流收集数据归约和汇总查找流中的最大值和最小值汇总连接字符串广义的归约汇总 用流收集数据 归约和汇总 重用一下之前的例子&#xff1a;包含一张佳肴列表的菜单。 就像刚刚看到的&#xff0c;在需要将流项目重组成集合时&#xff0c;一般会使用收集器(S…

uniapp 小程序 全局弹窗 每个需要使用的页面都不用再引用

文章目录 创建组件在项目的根目录下的vue.config.vue中配置页面中使用 使用全局组件&#xff0c;先声明全局组件 与普通的组件声明不同之处在于 1&#xff1a;目录形式 2&#xff1a;声明引用方式 创建组件 在components目录中创建组件目录/组件vue&#xff0c;如下 注意需要同…

SpringMVC之综合案例:参数传递,向页面传参,页面跳转

参数传递向页面传参页面跳转 1.参数传递 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"htt…

【PyTorch 08】如果要手动安装对应的包

例如有时候我们要下载 PyG &#xff0c;但是需要手动下载&#xff0c;需要进行以下步骤&#xff1a; 网站链接&#xff1a;https://data.pyg.org/whl/ 首先查看当前安装好的Pytorch版本和对应的cuda版本 1. pip list&#xff1a;查看torch版本 2. torch.version.cuda&#xf…

3.4 栈与递归

3.4.1 采用递归算法解决问题 3.4 栈与递归的关系 栈和递归之间有着紧密的关系&#xff0c;特别是在算法和程序设计中。栈作为一种数据结构&#xff0c;可以有效地支持递归算法的实现。本节我们将详细讨论栈在递归算法中的作用及其在程序设计中的重要性。 1. 递归算法的基本概…

C#和.NET FrameWork概述

.NET FrameWork是什么&#xff1f; .NET FrameWork是由微软开发的一种面相对象的环境框架&#xff0c;特点如下&#xff1a; ①多平台&#xff1a;可在各种计算机、服务器、手机上运行。 ②标准化通讯协议&#xff1a;如XML、HTTP、JSON等。 ③安全性&#xff1a;CLR检查并…

通过实例学习鸿蒙静态库的创建与使用

简要介绍 静态共享包HAR&#xff08;Harmony Archive&#xff09;&#xff0c;是为了实现代码和资源的共享&#xff0c;可以包含代码、C库、资源和配置文件&#xff0c;随使用方一起编译&#xff0c;如果在多个应用中进行调用&#xff0c;就需要有多个HAR&#xff0c;和应用绑…