C高级day4(shell脚本)

一、Xmind整理:

二、上课笔记整理:

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

#!/bin/bash
touch 1
chmod 241 1
if [ -r 1 ]
thenecho "文件1有可读权限"
fi
if [ -w 1 ]
thenecho "文件1有可写权限"
fi
if [ -x 1 ]
thenecho "文件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 ]
thenecho "$year是一个闰年"
elseecho "$year不是一个闰年"
fi

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

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

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

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

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

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

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

#!/bin/bash
read -p "请输入成绩" score
ret=$((score/10))
: 'case $score in1??|9?)echo "A";;8?)echo "B";;7?)echo "C";;6?)echo "D";;*)echo "不及格"
esac'case $ret in10|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 ]
dosum=$((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 ]
doj=1    #每一次进入内层循环前j都从1开始while [ $j -le $i ]doecho -n "*"((j++))doneecho ""   #每行输出结束需要换行((i++))
done

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

#!/bin/bash
for i in {100..999}
dobai=$(($i/100))shi=$(($i/10%10))ge=$(($i%10))if test $(($[$bai**3] + $[$shi**3] + $[$ge**3])) -eq $ithen echo  $ifi
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 ~`
doif [ -d ~/$i ]then((dnum++))fiif [ -f ~/$i ]then((fnum++))fi
done
echo $((dnum+fnum))#!/bin/bash
#var1和var2都是软连接文件
var1=2
var2=test1
#对软连接文件判断是,实际是在判断源文件
if [ -f $var1 ]
thenecho "$var1是一个普通文件"
fiif [ -d  $var2 ]
thenecho "$var2是一个目录文件"
fi   

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

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

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

#!/bin/bash
read -p "请输入游戏名" gnameselect i in Y YES y yes N NO n NO
docase $i in Y|YES|y|yes)echo "下载$gname";;N|NO|n|no)echo "不下载$gname"exitesac
done

 16.辅助控制关键字

#!/bin/bash
for((i=1;i<3;i++))
doecho "进入第一层循环 i=$i*******************"echo for j in `seq 1 1 2`doecho "进入第二层循环 j=$j------------------"echo for k in {1..3}doecho "进入第三层循环 k=$k /"echo if [ $k -eq 2 ]thenecho "准备跳出循环"#break 3 continue 3  fiecho "退出第三层循环 k=$k/"echo doneecho "退出第二层循环 j=$j------------------"echo doneecho "退出第一层循环 i=$i*******************"echo 
done

 17.获取函数的返回值

#!/bin/bash
function fun()
{echo hello world
}function add()
{echo $(($1+$2))echo $0a=258return $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 $0a=258return $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 $0a=258local b=80   #被定义成了一个局部变量echo $bunset b     #unset是可以清空局部变量echo $breturn $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]))donereturn $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.hqwc.cn/news/106339.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity下如何实现RTMP或RTSP播放端录像?

好多开发者问我们&#xff0c;Unity环境下&#xff0c;除了RTSP或RTMP的播放&#xff0c;如果有录像诉求&#xff0c;怎么实现&#xff1f;实际上录像相对播放来说&#xff0c;更简单一些&#xff0c;因为不涉及到绘制&#xff0c;只要拉流下来数据&#xff0c;直接写mp4文件就…

人机融合的熵增定律

在信息论中&#xff0c;熵增定律是指在信息传输或处理过程中&#xff0c;总的熵&#xff08;即不确定性或信息的度量&#xff09;通常会增加。然而&#xff0c;对于人机融合的情况&#xff0c;熵增定律并不是一个普适的定律&#xff0c;而是取决于具体情境和应用。 当人与机器进…

多线程的创建

一、基本概念 1 cpu CPU的中文名称是中央处理器&#xff0c;是进行逻辑运算用的&#xff0c;主要由运算器、控制器、寄存器三部分组成&#xff0c;从字面意思看就是运算就是起着运算的作用&#xff0c;控制器就是负责发出cpu每条指令所需要的信息&#xff0c;寄存器就是保存运…

golang面试题:reflect(反射包)如何获取字段tag​?为什么json包不能导出私有变量的tag?

问题 json包里使用的时候&#xff0c;会结构体里的字段边上加tag&#xff0c;有没有什么办法可以获取到这个tag的内容呢&#xff1f; 举例 tag信息可以通过反射&#xff08;reflect包&#xff09;内的方法获取&#xff0c;通过一个例子加深理解。 package mainimport (&quo…

博客系统(升级(Spring))(三)登录功能,注册功能,注销功能

博客系统 (三&#xff09; 博客系统登录用户前端后端数据查询&#xff08;在mapper上添加mapper接口&#xff09; 注册用户前端后端插入数据 注销 博客系统 博客系统是干什么的&#xff1f; CSDN就是一个典型的博客系统。而我在这里就是通过模拟实现一个博客系统&#xff0c;这…

基于Java SSM+layui+mysql实现的图书借记管理系统源代码+数据库

介绍 本项目使用的技术栈是SSMlayuimysql&#xff0c;服务器使用的是tomcat 其中书籍图片存放的位置需要先在tomcat根目录下conf/setting.xml中配置虚拟路径&#xff0c;本项目配置的是D:\upload 完整代码下载地址&#xff1a;图书借记管理系统 用户角色划分 游客 使用本系…

SQL 注入漏洞攻击

文章目录 1. 介绍2. 无密码登录3. 无用户名无密码登录4. 合并表获取用户名密码 1. 介绍 假设你用自己的用户名和密码登录了一个付费网站&#xff0c;网站服务器就会查询一下你是不是 VIP 用户&#xff0c;而用户数据都是放在数据库中的&#xff0c;服务器通常都会向数据库进行查…

这一次,我顿悟了

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

MySQL(一)

简介 MySQL是一个关系型数据库管理系统&#xff0c;由瑞典 Mysql AB 公司开发&#xff0c;属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一。 安装部署 yum源安装 [rootwenzi ~]# ls anaconda-ks.cfg mysql80-community-release-el7-10.noarch.rpm orig…

一起学数据结构(6)——栈和队列

上篇文章中&#xff0c;对栈的概念及特点进行了解释&#xff0c;并且给出了栈实现的具体代码。本篇文章将给出队列的基本概念及特点。并给出相应的代码。 1. 队列的概念及结构&#xff1a; 在给出队列的概念之前&#xff0c;先给出上篇文章中提到的栈的概念&#xff1a;一种只…

创建开机自启的脚本

在启动许多ros节点时有多种方式&#xff0c;我推荐使用launch来启动所有的节点&#xff0c;这也是一种规范的方式。以后会慢慢向这个方向靠。 除此之外还可以通过创建的脚本来启动&#xff1a; 脚本位置不限&#xff0c;只需要&#xff1a; sudo gedit xxx.sh在里面添加相应的…

【每天一道算法题】day2-认识时间复杂度

认识时间复杂度&#xff1a; O&#xff1a;读作big O&#xff0c;在数学上指的是上限的意思 常数时间的操作 一个操作如果和样本的数据量没有关系&#xff0c;每次都是固定时间内完成的操作&#xff0c;叫做常数操作。时间复杂度为一个算法流程中&#xff0c;常数操作数量的一…