#!/bin/bash
# #!---->shebang
# 指明脚本运行使用的shell解析器
#这是一行注释
echo "第一个shell脚本"
- 定义一个数组,使用外部参数给数组赋值,通过数组求外部参数的个数
- 把家目录的下的所有文件名放到数组中,并记录家目录下文件的个数
#!/bin/bash
arr=($*) #把所有的外部参数赋值给数组arr
echo ${#arr[*]}
arr2=(`ls ~`) #把家目录的所有文件名赋值给数组arr1
echo ${#arr2[*]}
echo ${arr2[@]}
#!/bin/bash
#read -p "请输入一个变量" var
#read -n 3 var
#read -t 3 var
#read -a arr
read -sp "请输入一个变量" -n 3 -t 4 var
#echo ${#arr[*]}
echo $var
#!/bin/bash
read -p "请输入两个变量" var1 var2 #如果同一行获取两个变量,变量中间放空格
((var1++)) #自增
((var2=var1+var2))
echo $var1
echo $var2
((var1=var1**3)) #对var1进行幂运算
echo $var1
#!/bin/bash
num1=`id -u root`
num2=`id -g`
echo $((num1+num2))
#比较num1和num2的大小关系
echo $((num1
#!/bin/bash
arr=(`ls`)
arr1=(`ls ~`)
brr=(`ls` `ls ~`) #把两个路径下的文件,放到同一个数组中
crr=(${arr[*]} ${arr1[*]}) #先把两个路径下的文件分别存在不同数组中,再拼接两个数组
num1=${#arr[*]}
num2=${#arr1[*]}
echo $[num1+num2]
echo ${#brr[*]}
echo ${#crr[*]}
arr3=(`ls ~/*.c`)
arr4=(`ls ~/*.sh`)
#对前两行的数组计数
num3=${#arr3[*]}
num4=${#arr4[*]}
echo $[num3+num4]
计算/etc/group中,第20行组用户gid和第10行组用户gid的和
#!/bin/bash
read -p "请输入两个变量" var1 var2
expr $var1 \>= $var2
#获取/etc/group中第20行用户的gid
num1=`head -20 /etc/group | tail -1 | cut -d : -f 3`
#获取/etc/group中第10行用户的gid
num2=$(head -10 /etc/group | tail -1 | cut -d : -f 3)
expr $num1 + $num2
#!/bin/bash
read -p "请输入一个网址" net
len=`expr length $net` #网址的长度
#找第一个.的位置
pos1=`expr index $net .`
#截取第一个.前面的所有子串
arr[0]=`expr substr $net 1 $((pos1-1))`
#为了找第二个.需要把后面的所有子串都截取出来
str2=`expr substr $net $((pos1+1)) $len`
#找到第二个.的位置
pos2=`expr index $str2 .`
arr[1]=`expr substr $str2 1 $((pos2-1))`
arr[2]=`expr substr $str2 $((pos2+1)) $len`
echo ${arr[*]}
#!/bin/bash
touch 1
chmod 241 1
if [ -r 1 ]
then
echo "文件1有可读权限"
fi
if [ -w 1 ]
then
echo "文件1有可写权限"
fi
if [ -x 1 ]
then
echo "文件1有可可执行权限"
fi
#!/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%4==0&&year%100!=0||year%400==0)) -eq 1 ]
then
echo "$year是一个闰年"
else
echo "$year不是一个闰年"
fi
#!/bin/bash
read -p "请输入.sh文件" var
if [ -e "$var" ]
then
echo "文件存在"
if [ -x "$var" ]
then
bash $var
else
chmod 777 $var
fi
else
echo"文件不存在"
touch $var
fi
#!/bin/bash
read -p "请输入一个.c文件" filename
if [ -s $filename ] #判断文件是否存在且有内容
then
gcc $filename
else
if [ -e $filename ] #如果文件存在
then
rm $filename
echo "$filename已删除"
else
echo "$filename不存在"
fi
fi
#!/bin/bash
read -p "请输入两个文件名" filename1 filename2
if [ $filename1 -nt $filename2 ]
#如果条件成立,-nt参数表示前面文件的时间戳更新
then
echo "$filename1更新"
else
echo "$filename2更新"
fi
#!/bin/bash
read -p "请输入成绩" score
ret=$((score/10))
: 'case $score in
1??|9?)
echo "A"
;;
8?)
echo "B"
;;
7?)
echo "C"
;;
6?)
echo "D"
;;
*)
echo "不及格"
esac'
case $ret in
10|9)
echo "A"
;;
8)
echo B
;;
7)
echo C
;;
6)
echo D
;;
*)
echo "不及格"
esac
read -p "请输入一个字符" var
case $var in
[0-9])
echo "是一个数字"
;;
[A-Z]|[a-z])
echo "是一个字母"
;;
*)
echo 不是数字也不是字母
esac
#!/bin/bash
i=1
sum=0
while [ $i -le 100 ] # le 第一个数小于等于第二个数
do
((sum += $i))
((i++))
done
echo $sum
#!/bin/bash
read -p "请输入数组" -a arr
i=0
sum=0
while [ $i -lt ${#arr[*]} ]
do
((sum += ${arr[i]}))
((i++))
done
echo $sum
#!/bin/bash
read -p "请输入行数" line
i=1
j=1
while [ $i -le $line ]
do
j=1 #每一次进入内层循环前j都从1开始
while [ $j -le $i ]
do
echo -n "*"
((j++))
done
echo "" #每行输出结束需要换行
((i++))
done
#!/bin/bash
#for i in `seq 100 999`
for i in {100..999} #{1..3}展开1-3内的每一个数
do
x=$((i%10)) #求个位
y=$((i/10%10)) #求十位
z=$((i/100)) #求百位
if [ $((x**3+y**3+z**3)) -eq $i ]
then
echo $i是一个水仙花数
fi
done
#!/bin/bash
read -p "请输入行数" line
i=1
j=1
while [ $i -le $line ]
do
j=1
while [ $j -le $i ]
do
echo -n "*"
((j++))
done
echo -e "\n"
((i++))
done
arr=([0]=12 [5]=78 [7]=23)
sum=0
for j in ${arr[*]}
do
((sum+=j))
done
echo $sum
#!/bin/bash
fnum=0
dnum=0
for i in `ls ~`
do
if [ -d ~/$i ]
then
((dnum++))
fi
if [ -f ~/$i ]
then
((fnum++))
fi
done
echo $((dnum+fnum))
#!/bin/bash
#var1和var2都是软连接文件
var1=2
var2=test1
#对软连接文件判断是,实际是在判断源文件
if [ -f $var1 ]
then
echo "$var1是一个普通文件"
fi
if [ -d $var2 ]
then
echo "$var2是一个目录文件"
fi
#!/bin/bash
read -p "请输入游戏名" gname
select i in Y YES y yes N NO n NO
do
case $i in
Y|YES|y|yes)
echo "下载$gname"
;;
N|NO|n|no)
echo "不下载$gname"
exit
esac
done