清_shell语句数组函数练习(未完!!!)

博客围绕Shell编程展开,包含多个函数定义及功能实现。如show函数输出个人信息,getnum函数求文件夹数量,还有类似seq函数等。挑战题涉及网络主机探测、用户创建与删除。补充部分有数组求最值和判断元素是否存在等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、定义一个show函数,传递自己的个人信息并调用输出

#! /bin/bash
		functon getnum
		{
				echo "$1"
				echo "$2"
				echo "$3"
		}
		getnum  "lvqing" "女"  " 158cm"

2、定义一个getnum函数,求某路径下文件夹的数量并输出

#! /bin/bash
		function getnum
		{
				num=0
				for file in ` ls $1`
				do
						num=`expr $sum + 1`
				done
				echo "$1的文件夹的数量: $num "
		}
		#调用函数
		getnum  /

3、定义一个类似于seq函数
seq 100
seq 1 100
seq 1 2 100

#! /bin/bash
	function seqself
	{
			if [ $#  -eq  0 ]
			then
						echo "seqself 缺少操作数"
			elif [  $#  -gt  3  ]
			then
						echo "seqself 额外的操作数 "
			elif [ $# -eq 1 ]
			then 
						for (( i=1;i<=$1;i++ ))
						do
								echo $i
						done
				elif [ $# -eq 2 ]
				then
						for (( i=$1;i<=$2;i++ ))
						do
								echo $i
						done
				elif [ $# -eq 3 ]
				then
						for  (( i=$1;i<=$3;i+=$2 ))
						do
								echo $i
						done
			fi
	}
seqself   1 2 100

4、定义一个函数:search
实参:path 文件名
返回 1 不存在:0

 #!  /bin/bash
			 function  search
			 {
			 		read path
			 		if [ -f  $path ]
			 		then
			 				return 1
			 		else
			 				return 0
			 		fi
			 }
			 search " $ path"
			 echo $?

挑战题:
1、定义函数:探测某教室指定网络地址下有多少台主机在线
192.168.7.100 -192.168.7.200
2、定义一个函数:userlist
创建C1906020~C19060300区间的用户【并指定用用户密码为123456】
调用:
userlist 20 300
定义一个函数:rmuser,实现删除指定用户
补充:
1、array=(1 3 2 45 6 3 4 7 6 8 9 0 10)求最大值,次大值

   #!  /bin/bash
    		num=(1 3 2 45 6 3 4 7 6 8 9 0 10 )
    		m=0
    		n=0
    		b= $ {#num[*]}
    		for (( i=0;i<= $ b;i++ ))
    		do
    				if [[ $ {num[$i]} -gt $m ]]
    				then
    							m= ${num[$i]}
    				elif (( num[$ i] < $ m && num[ $i] > $n ))

补充:[  ${num[ $i]} -lt $m -a ${num[ $i]} -gt $n ]这种可以出结果但是会出现异常,语法有问题
				then
							n=${num[$i]}
				fi
		done
		echo $m $n

2.array=(1 3 4 6 7 8 10 13 14 15 17 19 20)判断key=19是否存在

#! /bin/bash
		array=(1 3 4 6 7 8 10 11 13 14 15 17 19 20)
		read a
		for (( i=0;i<15;i++ ))
		do
				if  [[  $a -eq ${num[$i]}  ]]
				then
							echo "yes"
							break
				fi
				if  [[ $i  -eq 14  ]]
				then
						echo "no"
						break
				fi
		done
<think>首先,用户的问题是:“shell ${!} 可以引用数组吗”,这是在问Shell脚本中,${!} 是否可以用于引用数组。 我需要回忆一下Shell脚本的知识。在Bash中,${!} 是一个特殊的参数扩展。它用于间接引用变量。具体来说,${!var} 表示引用变量名为 $var 的值的变量。 例如: ```bash var="name" name="John" echo ${!var} # 输出 John,因为 $var 的值是 "name",所以 ${!var} 引用了 $name ``` 现在,问题是关于数组的。在Bash中,数组可以用索引或关联数组来表示。用户问 ${!} 是否可以引用数组。 ${!} 本身是无效的语法;它必须是 ${!something}。在参数扩展中,${!prefix*} 或 ${!prefix@} 用于获取以特定前缀开头的变量名列表。 对于数组,${!array[@]} 或 ${!array[*]} 用于获取数组的所有键(索引)。例如: ```bash arr=(a b c) echo ${!arr[@]} # 输出 0 1 2,即索引列表 ``` 所以,${!} 不能直接引用数组元素,但 ${!array_name[@]} 用于获取数组的键。 用户的问题是:“shell ${!} 可以引用数组吗”,可能是在问 ${!} 这个语法是否可以用于数组引用。 在标准Shell中,${!} 单独使用是无效的。它需要有一个参数。在Bash中,${!var} 用于间接引用,而 ${!array[@]} 用于获取数组索引。 所以,回答应该是:${!} 本身不能直接引用数组,但在Bash中,${!array_name[@]} 可以用于获取数组的索引。 现在,我需要用中文回答,因为用户要求“请使用中文回答问题”。 回答结构: 1. 直接回答问题。 2. 解释原因或提供例子。 3. 在末尾添加 §§相关问题§§,包含3-5个相关问题。 最后,必须输出 §§相关问题§§ 在第一行,然后列出问题。 用户说:“请在回答完问题后,必须根据用户的问题及你的回答提出3-5个 §§相关问题§§。” 和 “§§相关问题§§ 必须输出在回答的末尾且不可缺少! 第一行必须完整且输出 "§§相关问题§§"!禁止换行分散。” 所以,在回答的最后部分,输出: §§相关问题§§ 1. ... 2. ... 3. ... 问题应该基于用户的问题和我的回答。 现在,构建回答: - 先回答问题:在Shell中,${!} 本身不能直接引用数组。但在Bash中,${!array[@]} 可以用于获取数组的索引。 用中文: 在Shell脚本中,${!} 语法本身不能直接用于引用数组。然而,在Bash中,${!array_name[@]} 可以用于获取数组的所有索引。 提供例子: 例如,在Bash中: ```bash arr=(apple banana cherry) echo ${!arr[@]} # 输出:0 1 2 ``` 如果用户指的是间接引用数组,${!var} 可以引用另一个变量,但如果那个变量是数组名,它可能不会按预期工作,因为数组需要特殊处理。 在Bash中,你可以使用间接引用数组: ```bash array_name="arr" arr=(a b c) echo ${!array_name[0]} # 这会出错,因为 ${!var} 用于标量 ``` 要间接引用数组元素,需要额外的技巧,如使用 nameref 或 eval。 所以,回答要准确:${!} 不直接支持数组引用,但有一些相关用法。 总结回答: 在Shell脚本中,${!} 语法(如 ${!var})主要用于间接引用变量,而不是直接用于数组。对于数组,Bash提供了 ${!array[@]} 来获取索引列表。因此,${!} 本身不能直接引用数组元素。 现在,对于相关问题,我需要提出3-5个问题,基于用户的问题和我的回答。 可能的 §§相关问题§§: 1. 在Bash中,如何使用 ${!array[@]} 获取数组索引? 2. 如何间接引用一个数组变量? 3. Shell中有哪些其他方式可以操作数组? 4. ${!prefix*} 和 ${!array[@]} 有什么区别? 5. 在Zsh或其他Shell中,${!} 的行为是否相同? 确保问题相关。 列出: 1. 在Bash中,${!array[@]} 的具体用法是什么? 2. 如何通过变量名间接访问数组元素? 3. 除了 ${!},Shell中还有哪些数组操作技巧? 4. ${!prefix*} 和 ${!array[@]} 的功能有何不同? 5. 在POSIX Shell中,数组支持如何? 现在,完整回答。</think>在Shell脚本中,${!} 语法本身不能直接用于引用数组元素。具体来说: - ${!} 单独使用是无效的语法,它必须与一个变量名结合使用,例如 ${!var},这表示间接引用(即引用变量名为 $var 的值的变量)。 - 对于数组,在Bash中,${!array_name[@]} 或 ${!array_name[*]} 可以用于获取数组的所有索引(键),但不能直接引用数组元素本身。 - 例如: ```bash arr=("apple" "banana" "cherry") echo ${!arr[@]} # 输出索引:0 1 2 ``` 如果尝试用 ${!var} 间接引用数组(如 `var="arr"; echo ${!var}`),它只会输出数组的第一个元素或引发错误,而不是完整引用数组。 总结:${!} 主要用于间接变量引用,而非数组操作;数组处理需使用专门的语法如 ${array[@]} 或 ${!array[@]}。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值