汇总实验一:要求输出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