2. 使用shell script编写函数fact,函数实现计算输入数字序列中所有奇数之和。
时间: 2024-02-24 21:56:23 浏览: 41
可以使用以下Shell脚本实现:
```shell
#!/bin/bash
# 定义函数fact
function fact {
sum=0
for i in "$@"
do
if [ $((i%2)) -eq 1 ]; then
sum=$((sum+i))
fi
done
echo $sum
}
# 调用函数fact,并传入参数
result=$(fact 1 2 3 4 5 6 7 8 9)
# 输出结果
echo "奇数之和为:$result"
```
在上述脚本中,我们定义了一个名为`fact`的函数,它接受任意数量的参数。函数中,我们使用`for`循环遍历所有传入的参数,如果当前参数是奇数,则将其加入到变量`sum`中。最后,我们使用`echo`命令输出`sum`的值,即所有奇数之和。在脚本的最后,我们调用`fact`函数,并传入一组数字作为参数,然后将返回值保存到变量`result`中,最后输出结果。
相关问题
使用while循环编写shell脚本计算100以内数字的和
好的,下面是示例代码:
```bash
#!/bin/bash
sum=0
i=1
while [ $i -le 100 ]
do
sum=$((sum+i))
i=$((i+1))
done
echo "100以内数字的和为:$sum"
```
解释一下:
首先定义了两个变量 `sum` 和 `i`,分别用于存储累加结果和当前正在累加的数字。
然后使用 `while` 循环,判断当前数字是否小于等于 100,如果是,则执行循环体中的代码。
循环体中,将当前数字加到累加结果中,同时将当前数字加 1,以便下一次循环累加下一个数字。
当循环结束后,输出累加结果即可。
注意,这里使用了 `$((...))` 语法来进行算术运算,这是 bash 中的一种内置的算术运算方式。
编写login()函数,实现登录功能 用户信息保存在userinfo.dat中,要在程序中判断工号和密码是否正确。shell程序
好的,下面是一个简单的实现:
```
#!/bin/bash
# 读取用户信息
users=$(tail -n +2 userinfo.dat)
# 输入工号和密码
read -p "请输入工号:" id
read -p "请输入密码:" password
# 验证工号和密码
found=0
while read line; do
fields=($line)
if [[ ${fields[0]} == $id && ${fields[1]} == $password ]]; then
found=1
break
fi
done <<< "$users"
# 输出结果
if [[ $found == 1 ]]; then
echo "登录成功!"
else
echo "工号或密码错误!"
fi
```
该脚本首先使用 `tail` 命令读取除第一行以外的所有行,即用户信息。然后要求用户输入工号和密码,最后在用户信息中查找是否有匹配的工号和密码。如果有,输出登录成功,否则输出错误信息。
需要注意的是,`userinfo.dat` 文件的第一行应该是一个表头,列出各字段的名称,后面的行则是每个用户的信息,字段之间用空格分隔。在这里假设第一个字段是工号,第二个字段是密码。