- #!/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
- #比较num1和num2的大小关系
- echo $((num1
练习6:计算当前目录下文件个数和家目录下文件个数的总和、计算家目录下.c和.sh文件的和
- #!/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]
练习7:终端读入两个数据,使用expr比较大小关系、
计算/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
练习8:终端输入网址,如:www.hqyj.com,要求:接触网址每个部分,并放入数组中,不能使用cut,使用expr解决
- #!/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[*]}
练习9:创建一个文件,给组用户可读权限,所属用户可写权限,其他用户可执行权限,使用if判断文件有哪些权限
- #!/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
练习10:终端输入年份,判断闰平年(四年一闰,百年不闰,四百年再闰)
- #!/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
练习11:终端输入一个.sh文件名,判断文件是否存在,如果存在判断文件是否有可执行权限,如果有执行脚本,如果没有添加可执行权限,如果文件不存在,创建脚本文件
- #!/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
练习12:终端输入一个.c文件名,判断文件中是否有内容,如果有内容编译该文件,如果没有内容删除文件
- #!/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
练习13:终端输入两个文件名,判断文件的时间戳哪一个更新
- #!/bin/bash
- read -p "请输入两个文件名" filename1 filename2
- if [ $filename1 -nt $filename2 ]
- #如果条件成立,-nt参数表示前面文件的时间戳更新
- then
- echo "$filename1更新"
- else
- echo "$filename2更新"
- fi
练习14:终端输入学生成绩,判断等级100-90A,90-80B,80-70C,70-60D,其他不及格
- #!/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
练习15:终端输入一个字符,判断是字母还是数字字符
- read -p "请输入一个字符" var
- case $var in
- [0-9])
- echo "是一个数字"
- ;;
- [A-Z]|[a-z])
- echo "是一个字母"
- ;;
- *)
- echo 不是数字也不是字母
- esac
练习16:求1-100的和,5050
- #!/bin/bash
- i=1
- sum=0
- while [ $i -le 100 ] # le 第一个数小于等于第二个数
- do
- ((sum += $i))
-
- ((i++))
- done
- echo $sum
练习17:终端输入数组,使用while循环,实现数组中元素的求和
- #!/bin/bash
- read -p "请输入数组" -a arr
- i=0
- sum=0
- while [ $i -lt ${#arr[*]} ]
- do
- ((sum += ${arr[i]}))
- ((i++))
- done
- echo $sum
练习18:终端输入行数,打印直角三角形
- #!/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
练习19:求100-1000内的水仙花数
- #!/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
练习20:终端输入行数,打印直角三角形
- #!/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
练习21:定义一个稀疏数组,求数组中元素的和
- arr=([0]=12 [5]=78 [7]=23)
- sum=0
- for j in ${arr[*]}
- do
- ((sum+=j))
- done
- echo $sum
练习22:求家目录下目录文件和普通文件个数的和
- #!/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
练习23:终端输入一个游戏名,让用户选择是否下载,如果用户选择的是Y|YES|y|yes就下载该游戏,N|NO|n|no就不下载该游戏
- #!/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
-
相关阅读:
408考研科目《数据结构》第八章第一节:排序的基本概念和插入排序(直接插入排序,折半插入排序,希尔排序)
JS中字符串常用方法(总结)
lodash已死?radash库方法介绍及源码解析 —— 对象方法篇
web前端期末大作业 基于HTML+CSS+JavaScript程序员个人博客模板(web学生作业源码)
画画用电容笔还是触控笔?电容笔10大品牌排行榜
数据可视化系列教程|六大组件基础知识
C++ 类
HTML emoji整理 表情符号
06【Redis事务与分布式锁】
按钮控制LED灯、蜂鸣器、风扇实验
-
原文地址:https://blog.csdn.net/Smallxu_/article/details/132817360