Linux 脚本编程题库

1.查找某文件是否存在(某文件名以参数形式传递),如果文件存在,则修改文件权限为用户主可读写,其他用户无任何权限,否则返回文件不存在!

#!/bin/bash

#脚本功能为:查找某文件是否存在(以参数形式),若存在,则将其权限设置为用户主可读可改,其他人无任何权限。否则则返回无此文件的信息

if [ -e $1 ]
then 
	chmod 600 $1
	echo "$1 权限已设置为用户主可读可改,其他人无任何权限"
else
	echo "$1 文件不存在!" 
fi

2.输入一个年份,判断此年份是否为闰年?

闰年(能被4整除却不能被100整除或能被400整除的年份就是闰年!)

#!/bin/bash

#脚本功能为输入一个年份,判断此年份是否为闰年?闰年(能被4整除却不能被100整除或能被400整除的年份就是闰年!)

read -p "please input a year:" year
let "leap=$year%4==0&&$year%100!=0 || year%400==0"
if [ $leap -eq 0 ]
then
	echo "$year 不是闰年!"
else
	echo "$year 是闰年!"
fi

3.输入一个大于0的整数,计算从0到这个数的和

#!/bin/bash

#脚本功能为输入一个大于0的整数,计算从0到这个数的和

read -p "please input a number:" number
sum=0
int=1
for ((;int<=number;int++))
do
	let "sum=sum+int"
done
#while(( $int<=$number ))
#do
#	let "sum=sum+int"
#	let "int++"
#done
echo "从 0 到 $number 的和为: $sum"

4.测试 192.168.1.* 整个网段中哪些主机处于开机状态,哪些主机处于关机状态
IP地址最后一位的有效范围是1~254。实际范围为0~255,但0、255都是系统保留的,不能作为“有效”ip使用。其中0是保留的表示网络的,而255是当前网络的广播地址,故ip最后一位的范围是1~254。

#!/bin/bash

for i in {1..254} #"..表示连续"
do	
	ping -c 2 -i 0.3 -W 1 192.168.1.$i &>>/home/Ubuntu/桌面/log.txt
	if [ $? -eq 0 ]
	then
		echo "192.168.1.$i is up"
	else
		echo "192.168.1.$i is down"
	fi
done

5.查找给定的用户是否在系统中工作(以参数形式传递),如果在则输出当天日期,再打印hello,否则打印waiting

#!/bin/bash

who | grep "^$1" >/dev/null
a=$?
if [ $a -eq 0 ] #if who | grep "^$1"
then 
	date
	echo "hello,$1"
else
	echo "waiting ..."
fi

6.编写脚本,CP文件并显示进度条

#!/bin/bash
# 编写脚本,cp文件,显示进度条

jindutiao(){
while :
do
     echo -n '#'
     sleep 0.2
done
}
jindutiao &
#echo "********* $0 $! $$ ***********"
cp -a $1 $2
echo ""
echo "拷贝完成"
#killall $0 会提示找不到进程
#kill $$ jindutiao & 还在后台执行,会一直输出‘#’
kill $!

7.编写脚本,持续ping某一个ip地址并打印时间戳,然后将输出的内容保存到日志文件

#!/bin/bash

while [ true ]
do
	echo "_________________________________________" >> /data/pingQX_log.txt
	date >> /data/pingQX_log.txt
	ping -c 2 39.107.207.235 >> /data/pingQX_log.txt
	echo "" >> /data/pingQX_log.txt
	echo "" >> /data/pingQX_log.txt
	echo "" >> /data/pingQX_log.txt
	sleep 1
done

8.

题目描述

在书写超过3个的连续的数字时,我们通常会将第一、二项和最后一项写出,中间的部分使用三个英文句号作为省略号 ...替代,例如2,3,...,7其实就是使用省略号省略了 4,5,6这三个数字。
现在,对于给定的数列,你需要直接求解出省略了多少数字。

输入描述:

在一行上输入一个长度不超过20的字符串。具体的规范为:
字符串仅包含三个数字 a,b,c(a+1=b; b+1<c),形如 a,b,...,c数字a与b间用且使用一个半角逗号(,)间隔;省略号由三个半角句号(.)构成;省略号前后各使用一个半角逗号间隔。

输出描述:

在一行上输出一个整数代表被省略的数字数量。

示例1

输入:2,3,...,7

输出:3

示例2

输入:1,2,...,100000000

输出:99999997

解法一:

#/bin/bash

read strnum

numleft1=$(echo ${strnum%%,*})
numright1=$(echo ${strnum#*,})
numleft2=$(echo ${numright1%%,*})
numright2=$(echo ${numright1#*,})
numleft3=$(echo ${numright2%%,*})
numright4=$(echo ${numright2#*,})

num_r=$((${numright4} - ${numleft2} - 1))
echo ${num_r}

解法二:

#bin/bash

read strnum

num2=$(echo ${strnum} | awk -F "," '{print $2}')
num4=$(echo ${strnum} | awk -F "," '{print $4}')

num_r=$(( ${num4} - ${num2} - 1 ))
echo ${num_r}

9

题目描述

小明有两个整数a和b,他想找到这样一个整数c,使得这三个整数在经过排序后能成为一个等差数列。

输入描述:

在一行上输入两个整数a,b(1≦a,b≦10^6)代表已有的数字。

输出描述:

在一行上输出一个整数代表你所找到的第三个数字。

示例1

输入:

3 2

输出:1

示例2

输入:3 2

输出:4

#/bin/bash

read a b

c=$(($b + $b - $a))
#c=$(($a + $a - $b))

echo $c

10

题目描述

为了欢迎新同学,每来一个同学就输出“Welcome to china <name>”

输入描述
第一行输入一个整数 n(1≤𝑛≤100),代表需要欢迎的同学数量。
接下来 n 行,每行输入一个同学姓名。
保证同学姓名只含有大小写英文字母,不含有空格,且长度不超过20。

输出描述:
对于每一个同学,输出一行 “Welcome to china <name>”,把其中的 <name> 替换成提供给你的同学姓名。

#/bin/bash

read n

while (($n>0))
do
	n=$(($n - 1))
	read str
	welcom="Welcome to china ${str}"
	echo $welcom
done

11

题目描述

评测系统一共有 n 台评测机,给定数组 a,对于第 i 台评测机,它最多可以同时评测 ai 个程序。每个程序只能被一台评测机评测。

在一次模拟评测中,有 x个程序交给月赛评测系统,但是不知道如何把这些程序分配给评测机效果最好。

想知道,最少需要几台评测机才能同时评测这 x个程序,以及最多可以分配给几台评测机同时评测这 x个程序。

输入描述:

第一行包括两个整数 n(1≤n≤10^3)和 x(1≤x≤10^9),分别表示评测机的数量和程序数量。

第二行有 n个整数,第 i个正整数 ai(1≤ai≤ 10^6)代表第 i个评测机最多可以同时评测的程序数量。

数据保证: ∑ai≥x

输出描述:

输出一行两个整数,分别表示最少需要几台评测机才能同时评测这 x个程序,以及最多可以分配给几台评测机同时评测这x个程序。

示例1

输入:

4 8
1 2 3 4

输出:3 4

示例2

输入

4 10
1 2 3 4

输出

4 4

示例3

输入

8 4
3 2 1 2 3 4 3 2

输出

1 4

样例解释

  • 第一个样例:对于最少评测机数量,可以将这 8个程序分配给第 2,3,4 台评测机即可,一共至少需要 3台评测机;对于最多评测机数量,先给 4台评测机每台分配一个程序,然后剩下的程序随意分配即可,一共最多可以分配给 4台评测机。

  • 第三个样例:对于最少评测机数量,可以把全部 4个程序交给第 6台评测机即可,一共至少需要 1台评测机;对于最多评测机数量,把 4个程序,每台一个,分配给任意 4 台评测机即可,一共最多可以分配给 4台评测机。

#/bin/bash

read n x
read str
a=($str)

m=$n
for ((i=1; i<m; m--))
do
	for ((j=$i-1; j<m-1; j++))
	do
		k=$(($j + 1))
		if ((a[$j] > a[$k]))
		then
			temp_aj=${a[$j]}
			a[$j]=${a[$k]}
			a[$k]=$temp_aj
#			echo "${a[0]} ${a[1]} ${a[2]} ${a[3]}"
		fi
	done
done

#xh=$n
#while (($xh>0))
#do
#       xh=$(($xh - 1))
#       echo "a[$xh] = ${a[$xh]}"
#done

less=0
comp=$(($n -1))
number=$x
while (($number > 0))
do
	less=$(($less + 1))
	number=$(($number - ${a[$comp]}))
	comp=$(($comp - 1))
done

more=0
if (($n > $x))
then
	more=$x
else
	more=$n
fi

echo "$less $more"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值