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"