开封做网站的公司,网站 推广,营销管理制度范本,有什么做分销的几个网站目录
1.实现一个对数组求和的函数#xff0c;数组通过实参传递给函数
结果为#xff1a;
2.写一个函数#xff0c;输出当前用户的uid和id#xff0c;并使用变量接收结果 结果为#xff1a;
shell脚本指令前七个网页链接#xff1a;
八、shell中的分支语句
【1】ife…目录
1.实现一个对数组求和的函数数组通过实参传递给函数
结果为
2.写一个函数输出当前用户的uid和id并使用变量接收结果 结果为
shell脚本指令前七个网页链接
八、shell中的分支语句
【1】if···else分支
【2】test指令
1、创建一个文件给组用户可读权限所属用户可写权限其他用户可执行权限使用if判断文件有哪些权限
2、终端输入年份判断闰平年(四年一闰百年不闰四百年再闰)
3、终端输入一个.sh文件名判断文件是否存在如果存在判断文件是否有可执行权限如果有执行脚本如果没有添加可执行权限如果文件不存在创建脚本文件
4、终端输入一个.c文件名判断文件中是否有内容如果有内容编译该文件如果没有内容删除文件
5、终端输入两个文件名判断文件的时间戳哪一个更新
【3】case···in语句
1、终端输入学生成绩判断等级100-90A,90-80B,80-70C,70-60D,其他不及格
2、终端输入一个字符判断是字母还是数字字符
3、终端输入年月判断该月有多少天1-12以外的月份输入不合理
总结
九、循环语句
【1】while
1、求1-100的和5050 2、终端输入数组使用while循环实现数组中元素的求和
3、终端输入行数打印直角三角形
【2】for
1、求100-1000内的水仙花数(个位^3十位^3百位^3数本身)
2、定义一个稀疏数组求数组中元素的和
3、求家目录下目录文件和普通文件个数的和 使用连续列表的情况
【3】select···in
【4】select···in和case···in结合
1、终端输入一个游戏名让用户选择是否下载如果用户选择的是Y|YES|y|yes就下载该游戏N|NO|n|no就不下载该游戏。
十、辅助控制关键字
【1】break
十一、函数
【1】定义
【2】函数的调用
【3】函数如何获取外部参数
【4】获取函数的返回值 【5】没有返回值的函数怎么接收结果
【6】local在函数中的使用 1.实现一个对数组求和的函数数组通过实参传递给函数
#!/bin/bash
function sumarr()
{sum0arr($*)for i in ${arr[*]}do((sumi))doneecho 数组的和为$sum
}
sumarr 100 100 10 20 30 40
结果为 2.写一个函数输出当前用户的uid和id并使用变量接收结果
#!/bin/bash
function getuidgid()
{uidid -ugidid -gecho uid为$uidecho gid为$gid
}
ugidgetuidgid
echo $ugid结果为 shell脚本指令前七个网页链接
https://blog.csdn.net/ck0056/article/details/132745232
八、shell中的分支语句
【1】if···else分支
[]就是test指令
#单分支结构
if [ test语句 ] ----- if test 表达式
then语句块
fi#双分支
if [ test语句 ] ----- if test 表达式
then语句块
else 条件不成立执行的语句块
fi#多分支语句
if [ test语句 ] ----- if test 表达式
then语句块
elif [ test语句 ] ------ elif test 表达式
then条件不成立执行的语句块
fi#!/bin/bash
num190
num2300
#if [ $num1 -le $num2 ]
if test $num1 -le $num2
thenecho num1num2
fi
【2】test指令
test是一个终端指令用于条件判断
man test
字符串------test对于字符串的判断需要给字符串加
string1 string2:判断字符串1和字符串2是否相等
string1 ! string2:判断字符串1和字符串2是否不相等
-n string1:判断字符串1不为空
-z string1:判断字符串1为空整形数据的判断
-eq:两个数相等
-ne:两个数不相等
-gt:第一个大于第二个数
-ge:第一个数大于等于第二个数
-lt:第一个数小于第二个数
-le:第一个数小于等于第二个数文件相关的操作
file1 -nt file2:1的时间戳比2更新
file1 -ot file2:1的时间戳比2更旧
file1 -ef file2:1和2有相同的inode号
-b:文件存在且为块设备文件
-c:文件存在且为字符设备文件
-L/-h:文件存在且为软链接文件
-S:文件存在且为套接字文件
-s:文件存在且有内容
-e:文件存在
-f:文件存在且为普通文件
-r:存在且有可读权限
-w:文件存在且有可写权限
-x:文件存在且有可执行权限
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%40year%100!0||year%4000)) -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
【3】case···in语句
case $变量名 in常量1)语句;; -------类似于C中break的作用;;除了最后一条分之外都不能省略常量2)语句;;···· 常量n)语句;;*) -------类似于C中default但是*表示通配所有情况只能放在最后语句
esac case···in中常量可能的形式:
1|2|3|4)满足1234中任一个即可
[0-9]):满足0-9中任一个
[0-3]|4):满足0-3和4中的任一个
1、终端输入学生成绩判断等级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 不及格
esaccase $ret in10|9)echo A;;8)echo B;;7)echo C;;6)echo D;;*)echo 不及格
esac
2、终端输入一个字符判断是字母还是数字字符
read -p 请输入一个字符 var
case $var in[0-9])echo 是一个数字;;[A-Z]|[a-z])echo 是一个字母;;*)echo 不是数字也不是字母
esac
3、终端输入年月判断该月有多少天1-12以外的月份输入不合理 总结 case···in语句判断变量的值$变量名在shell中;;不能不写最后一个分支可以不写*通配所有情况如果想使用*表示其他分支的情况不能把*放在上面 九、循环语句
【1】while
while [ test语句 ] ------while test 表达式
do循环体
done#!/bin/bash
i0
while [ $i -lt 5 ]
doecho hello world((i))
done
1、求1-100的和5050 2、终端输入数组使用while循环实现数组中元素的求和 3、终端输入行数打印直角三角形
#!/bin/bash
read -p 请输入行数 line
i1
j1
while [ $i -le $line ]
doj1 #每一次进入内层循环前j都从1开始while [ $j -le $i ]doecho -n *((j))doneecho #每行输出结束需要换行((i))
done
【2】for
第一种类似于C的格式
for ((表达式1;表达式2;表达式3))
do循环体
done第二种shell中的格式
for 变量名 in 字符串列表
do循环体
donefor i in aa bb cc dd
doecho $i
done执行逻辑让变量循环遍历字符串列表中的每一种情况遍历结束后结束循环
循环的次数和字符串列表中字符串的个数有关
1、求100-1000内的水仙花数(个位^3十位^3百位^3数本身)
#!/bin/bash
#for i in seq 100 999
for i in {100..999} #{1..3}展开1-3内的每一个数
dox$((i%10)) #求个位y$((i/10%10)) #求十位z$((i/100)) #求百位if [ $((x**3y**3z**3)) -eq $i ]thenecho $i是一个水仙花数fidone
2、定义一个稀疏数组求数组中元素的和
arr([0]12 [5]78 [7]23)
sum0
for j in ${arr[*]}
do((sumj))
done
echo $sum
3、求家目录下目录文件和普通文件个数的和
#!/bin/bash
fnum0
dnum0
for i in ls ~
doif [ -d ~/$i ]then((dnum))fiif [ -f ~/$i ]then((fnum))fi
done
echo $((dnumfnum))#!/bin/bash
#var1和var2都是软连接文件
var12
var2test1
#对软连接文件判断是实际是在判断源文件
if [ -f $var1 ]
thenecho $var1是一个普通文件
fiif [ -d $var2 ]
thenecho $var2是一个目录文件
fi 使用连续列表的情况
1、seq 起始值 间隔值 终止值 ----在终端回显起始到终止值间的连续序列
seq 1 1 100 ---输出1-100
seq 如果后面只有一个数默认是终止值起始值和间隔值默认为1
拿到seq的结果需要使用命令置换符
seq 1 1 100
2、{1..3} ----展开1-3内的每一个数中间是两个.不能多写
【3】select···in
select 变量名 in 选项列表
do语句块
done执行逻辑
会在终端打印选项列表让用户选择用户选择是需要选择对应的序号
如果用户不输入直接回车会再打印一次选项列表
如果选择错误变量就获取到空值#!/bin/bash
select i in aa bb cc dd
doecho $i
done运行的结果
1) aa
2) bb
3) cc
4) dd
#?如果想要退出select···in语句直接使用ctrlc
【4】select···in和case···in结合
#!/bin/bash #selectin和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
1、终端输入一个游戏名让用户选择是否下载如果用户选择的是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 不下载$gnameexitesac
done
十、辅助控制关键字
【1】break
C中退出本层循环 continue n -------退出n层本次循环 continue 1 -------1可以不写 #!/bin/bash
for((i1;i3;i))
doecho 进入第一层循环 i$i*******************echo for j in seq 1 1 2doecho 进入第二层循环 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 十一、函数
【1】定义
shell中
function 函数名()
{函数体return 返回值(如果实现函数时有返回值就写return)
}shell中函数的注意事项:
1、function在定义函数时可以加也可以不加(建议加)
2、()内不能添加任何内容函数是否有参数根据调用来决定
3、如果函数有返回值直接在函数的定义中写出return
4、shell中的函数仍然满足先定义后调用的原则shell中函数的定义和声明不能分开
【2】函数的调用 函数名 实参1 实参2 实参3 ···· (函数有参数的情况) 函数名 (没有参数) 【3】函数如何获取外部参数
仍然通过位置变量获取 ${n}脚本的外部传参和函数的外部传参互不干扰
如果在函数中使用位置变量获取到的就是函数的外部参数
如果在脚本中使用位置变量获取到的就是脚本的外部参数$0只能获取脚本名【4】获取函数的返回值 $? 获取函数的返回值 -----使用$?的上一条指令一定是函数的调用 $?的本质是获取到上一条指令的执行结果 #!/bin/bash
function fun()
{echo hello world
}function add()
{echo $(($1$2))echo $0a258return $a #返回值只能返回0-255之中的数
}
add 12 34
var$? #使用$?接收函数的返回值
echo $var
echo $a 【5】没有返回值的函数怎么接收结果
如果函数没有返回值但是有输出语句可以使用命令置换符接收#!/bin/bash
function fun()
{echo hello world
}a90
function add()
{#echo $(($1$2))#echo $0a258return $a #返回值只能返回0-255之中的数
}
: add 12 34
var$? #使用$?接收函数的返回值
echo $var
echo $a #可以访问a的值a是一个全局变量#如何接受fun函数的结果
retfun
echo $ret #代码只有1行输出fun中的输出已经被命令置换符接收了
add
echo $a #258,因为a在函数内被改变了
【6】local在函数中的使用
#!/bin/bash
function fun()
{echo hello world
}a90
function add()
{#echo $(($1$2))#echo $0a258local b80 #被定义成了一个局部变量echo $bunset b #unset是可以清空局部变量echo $breturn $a #返回值只能返回0-255之中的数
}
: add 12 34
var$? #使用$?接收函数的返回值
echo $var
echo $a #可以访问a的值a是一个全局变量#如何接受fun函数的结果
retfun
echo $ret #代码只有1行输出fun中的输出已经被命令置换符接收了
add
echo $a #258,因为a在函数内被改变了
echo $b #空行因为b在函数内是一个loacl类型的变量局部变量