了解PATH递归显示的实验和数组的冒泡实验

汇总实验一:要求输出PATH所包含的虽有目录以及其中的所有可执行的文件
  实验思路:此实验需要用的知识有IFS字段分隔符、for循环、以及if判断语句,以及函数调用
  实验步骤:
[root@localhost opt]# vim test022.sh   
#!/bin/bash
file_list () {                            //定义一个函数名为file_list的函数
for f in $1/*                             //外循环调用$1下面的所有文件,并命名为f
do
  if [ -d $f ];then                       //if 判断f下面是不是目录 如果是执行下一条输出命令
   echo "$2$f"                            //输出的$2指的是下面传参的空格 即目录前面加一个空格
   file_list "$f" " $2"                   //自己调用一个自己的函数,进行下一目录递归
  elif [ -x $f ];then                     //第二个判断,如果$f是一个文件 那么输出空格文件
  echo "$2$f"
  fi
done
}

IFS=$IFS':'                                 //便利出以冒号分隔的所有路径
for folder in $PATH                         //将PATH的路径从新命名为folder
do
  echo "$folder:"                          //输出folder
  file_list "$folder" " "                 //主程序调用函数
done
实验一的第二种方法:
[root@localhost opt]# vim test000022.sh    
list_files() {
for f in `ls $1`                            //用ls命令显示此路径下的所有目录和文件
do
 if [ -d "$1/$f" ];then
  echo "$2$f"
  list_files "$1/$f" " $2"
   elif [ -x "$1/$f" ];then
   echo "$2$f"
  fi
done
}

IFS=$IFS':'
for folder in $PATH
do
 echo "$folder:"
 list_files "$folder" " "
done

Shell数组知识以及其实验
在Shell脚本中,数组是一种常见的数据结构,主要的应用场景包括:获取数组长度、
获取元素长度、遍历元素、元素切片、元素替换、元素删除等等。Shell 中的数组与Java、
C、Python不同,只有一维数组,没有二维数组。数组元素的大小与限制,也不需要事先
定义。Shell 数组用括号()来表示,元素用空格分隔,元素的下标与大部分编程语言类似
从0开始。
实验要求:创建一个文件arr.txt在其中的内容是 (44 66 11 33 22 55 88 77)请用冒泡排序的方法把文件内容进行排序要求有函数调用
实验步骤:首先建文件
[root@localhost opt]# vi arr.txt
44
66
11
33
22
55
88
77
然后进行实验的程序编写
[root@localhost opt]# vim test1026.sh 
#!/bin/bash                                          //脚本声明,表示以下程序用/bin/bash程序来执行
myarray() {                                          //定义函数名为myarray
array=(`echo $@`)                                    //输出数组赋值给变量array
a=${#array[*]}                                       //输出数组的长度并赋值给a
for ((i=1; i<$a; i++))                              //定义外循环当总次数为数组长度小一次
do
  for ((j=0; j<$a-i; j++))                          //内循环定义数组中每个相邻元素的大小
  do
   if [ ${array[$j]} -gt ${array[$[$j+1]]} ];then   //if判断前一个元素与后一个元素的 如果一个元素大于第二个元素
    temp=${array[$j]}                               //定义一个临时变量temp把上面比较大的元素赋值给临时变量
    array[$j]=${array[$[$j+1]]}                     //把第二个小的元素赋值给第一个元素
    array[$[$j+1]]=$temp                            //把临时变量的大的数赋值给第二个元素   
   fi                                               //判断结束
  done                                              //内循环完成第一轮 第一个元素下沉结束
done                                                //完成所有的元素大小排序
echo ${array[*]}                                   //输出冒泡排序后的结果
}

i=0                                                //下面是主程序
file=`cat /opt/arr.txt`                            //调用文件
for value in $file                                 //遍历file为value
do
  arr[$i]=$value                                   //定义的循环程序
  let i++
done

echo "老数组为:${arr[*]}"                         //输出的是老的数组
result=`myarray ${arr[*]}`                         //调用上面的函数
echo "排序后数组为:$result"                       //输出新的排序结果
第二中方法可以实现直接在执行结果的时候就能直接调用文件 无需要进入程序
方法二步骤
[root@localhost opt]# vim test1126.sh      
#!/bin/bash
myarray() {
array=(`echo $@`)
a=${#array[*]}
for ((i=1; i<=$a; i++))
do
    for ((j=0; j<$a-i; j++))
    do
    if [ ${array[$j]} -gt ${array[$[$j+1]]} ];then
    temp=${array[$j]}
    array[$j]=${array[$[$j+1]]}
    array[$[$j+1]]=$temp
    fi
 done
done
echo ${array[*]}
}

path=`pwd`                             //查看并获取代码文件的位置路径
newpath=$path/newfile.txt              //将获取的文件的路径赋值给newpath

if [ -f $1 ];then                      //检查$1是不是文件
  file=`cat $1`                       //获取代码文件的第一参数
else
   file=`cat $path/$1`              //继续查看别环境变量里的参数
fi
for value in $file
do
   echo -n " $value" >> $newpath       //获取一列表并追加到$newpath文件

done
arr=(`cat $newpath`)
echo "老数组为:${arr[*]}"
result=`myarray ${arr[*]}`
rm -rf $newpath
echo "排序后数组为:$result"
下面的这个查看结果的
[root@localhost opt]# bash test1126.sh arr.txt
老数组为:44 66 11 33 22 55 88 77
排序后数组为:11 22 33 44 55 66 77 88

猜你喜欢

转载自blog.csdn.net/Laiyunpeng666/article/details/108171580