9 월 13 일 수업 숙제 (연습)

1. 숙제 (연습) 내용:
1. 셸 프로그램의 운행 원 리 를 설명 합 니 다 (필요 한 도형 설명 을 첨부 할 수 있 습 니 다).
2. 셸 프로 그래 밍 에 관련 된 모든 지식 점 (예 를 들 어 변수, 문법, 명령 상태 등) 을 정리 하고 그림 을 가 져 가 야 합 니 다.
3. 과정 에서 말 한 모든 순환 문, 조건 판단 의 사용 방법 과 관련 된 예 를 정리한다.(if (jpg|png is not exist);echo ”You say a XX“)
4. 텍스트 처리 도구 sed 및 awk 의 용법 을 정리 합 니 다. (예시 가 있어 야 합 니 다)
5. 스 크 립 트 쓰기: 경로 가 존재 하지 않 으 면 디 렉 터 리 로 만 듭 니 다. 그렇지 않 으 면 존재 하 는 것 을 표시 하고 내용 형식 을 표시 합 니 다. (의심 하지 마 세 요. 이렇게 간단 합 니 다)
#!/bin/bash
#判断某路径是否存在,如果存在,显示其内容类型,否则创建与之同名的目录
#给定路径的方法:脚本参数
 if [ $# -lt 1 ];then
        echo "本脚本是用来判断某路径是否存在,请在脚本后输入至少一个路径"
        exit 1
 fi
 for i in $*;do
    if [ -e $i ];then
        echo  "$i已经存在"
        file $i
    else
        mkdir -p $i
        echo "已成功创建目录$i"
        echo -e "$(dirname $i)目录下的所有文件和子目录列表为: 
$(ls `dirname $i`)"      fi  done

6. 스 크 립 트 를 작성 하여 다음 과 같은 기능 을 완성 합 니 다.
                    주어진 두 수치 중 어느 것 이 크 고 어느 것 이 작은 지 판단 한다.
                    주어진 수치 방법: 스 크 립 트 파라미터, 명령 상호작용; (read 를 사용 하면 여전히 간단 합 니 다)
     주어진 수치 방법: 스 크 립 트 매개 변수
#!/bin/bash
#判断给定的两个数值大小
#给定数值的方法:脚本参数
[ $# -ne 2 ] && echo "本脚本用来判断给定的两个数值大小,请在脚本后输入两个整数" && exit 0
num1=$(echo $1 | grep '^[0-9]\+$')
num2=$(echo $2 | grep '^[0-9]\+$')
[ -z $num1 ] && [ -z $num2 ] && echo "$1,$2不是整数" && exit 0
[ -z $num1 ] && echo "$1不是整数" && exit 0
[ -z $num2 ] && echo "$2不是整数" && exit 0
[ $1 -eq $2 ] && echo "输入的两个数相同" && exit 0
[ $1 -gt $2 ] && echo "$1大于$2" && exit 0
[ $1 -lt $2 ] && echo "$1小于$2" && exit 0

   주어진 수치 방법: 명령 상호작용
#!bin/bash
#判断给定的两个数值的大小
#给定数值的方法:命令交互
echo "本脚本用来判断给定的两个数值大小"
read -p "请在10秒内输入两个整数: " -t 10 i j
[ -z $i ] && [ -z $j ] && echo "请重新输入两个整数" && exit 0
[ -z $j ] && echo "第二个数为空,请输入两个整数" && exit 0
num1=$(echo $i | grep '^[0-9]\+$')
num2=$(echo $j | grep '^[0-9]\+$')
[ -z $num1 ] && [ -z $num2 ] && echo "$i,$j不是整数" && exit 0
[ -z $num1 ] && echo "$i不是整数" && exit 0
[ -z $num2 ] && echo "$j不是整数" && exit 0
[ $i -eq $j ] && echo "输入的两个数相同" && exit 0
[ $i -gt $j ] && echo "$i大于$j" && exit 0
[ $i -lt $j ] && echo "$i小于$j" && exit 0

7. 100 이내 의 모든 홀수 의 합 을 구 합 니 다 (적어도 3 가지 방법 을 사용 합 니 다. 예, 이것 은 우리 의 숙제 입 니 다 ^ ^)
#!bin/bash
#求100以内所有奇数之和
echo "one表示使用第一种方法求得100以内所有奇数之和"
echo "two表示使用第二种方法求得100以内所有奇数之和"
echo "three表示使用第三种方法求得100以内所有奇数之和"
read -p "请在10秒内输入one|two|three中的任意一个单词: " -t 10 val
[ -z $val ] && echo "请输入one|two|three中任意一个单词" && exit 0
declare -i sum=0
declare -i j=1
case $val in
one)
for i in $(seq 1 2 100);do
    sum=$[$sum+$i]
done
echo "用for循环步进为2的方法求出100以内所有奇数之和为:$sum"
exit 0
;;
two)
for ((i=1;i<=100;i++)); do
   [ $[$i%2] -eq 1 ] && sum=$[$sum+$i]
done
echo "用for循环取2的模为1的方法求出100以内所有奇数之和为:$sum"
exit 0
;;
three)
while [ $j -le 100 ];do
    sum=$[$sum+$j]
   let j+=2
done
echo "用while循环步进为2的方法求出100以内所有奇数之和为:$sum"
exit 0
;;
*)
 echo "输入错误,请选择输入one|two|three中任意一个选项"
exit 0
esac

8. 스 크 립 트 를 작성 하여 다음 과 같은 기능 을 수행 합 니 다.
           (1) 스 크 립 트 에 두 텍스트 파일 경 로 를 전달 합 니 다.
           (2) 두 파일 중 공백 줄 수가 많은 파일 과 공백 줄 의 개 수 를 표시 합 니 다.
           (3) 두 파일 중 총 줄 수가 많은 파일 과 총 줄 수 를 표시 합 니 다.
#!bin/bash
#判断文本文件行数的方法
echo "本脚本用来判断给定的两个文本文件行数"
read -p "请在20秒内输入两个文本文件路径:" -t 20 file1 file2
[ -z $file1 ] && [ -z $file2 ] && echo "请输入两个文本文件路径" && exit 0
[ -z $file2 ] && echo "第二个文件路径为空,请输入两个文本文件路径" && exit 0
[ ! -f $file1 ] && [ ! -f $file2 ] && echo "输入的两个文件路径不存在或者不是文本文件,请重新输入" && exit 0
[ ! -f $file1 ] && echo "输入的第一个文件路径不存在或者不是文本文件,请重新输入" && exit 0
[ ! -f $file2 ] && echo "输入的第二个文件路径不存在或者不是文本文件,请重新输入" && exit 0
i=$(grep '^$' $file1 | wc -l)
j=$(grep '^$' $file2 | wc -l)
[ $i -eq $j ] && echo -e "$file1文件和$file2文件的空白行数相同 
 总共有空白行:$i行"   [ $i -gt $j ] && echo -e "空白行数较多的文件是$file1 
 有空白行:$i行"  [ $i -lt $j ] && echo -e "空白行数较多的文件是$file2 
 有空白行:$j行"  k=$(wc -l $file1 | cut -d' ' -f1) l=$(wc -l $file2 | cut -d' ' -f1) [ $k -eq $l ] && echo -e "$file1文件和$file2文件总的行数相同 
 总共有:$k行"   [ $k -gt $l ] && echo -e "行数较多的文件是$file1 
 总共有:$k行"  [ $k -lt $l ] && echo -e "行数较多的文件是$file2 
 总共有:$l行"

9. 대본 쓰기
           (1) 사용자 에 게 문자열 을 입력 하 라 고 알려 줍 니 다.
           (2) 판단:
                          quit 를 입력 하면 스 크 립 트 를 종료 합 니 다.
                          그렇지 않 으 면 입력 한 문자열 의 내용 을 표시 합 니 다.
#!/bin/bash
#判断用户输入一个字符串
read -p "请在15秒内输入一个字符串:" -t 15 str
[ -z $str ] && echo "请输入一个字符串" && exit 0
[[ $str == 'quit' ]] && exit 0 || echo "输入的字符串为:$str"

10. 스 크 립 트 를 작성 하고 2 ^ n 표를 인쇄 합 니 다. n 은 사용자 가 입력 한 값 과 같 습 니 다. (죄송합니다. 장 난 스 럽 습 니 다)
#!/bin/bash
#打印2^n表;n等于一个用户输入的值
k=1
read -p "请在5秒内输入一个整数:" -t 5 var
[ -z $var ] && echo "请输入一个整数" && exit 0
num=$(echo $var | grep "^[0-9]\+$")
[ -z $num ] &&  echo "输入错误,请输入一个整数" && exit 0
for ((i=0;i<=$var;i++));do
           echo   "2^${i}=$k"
         k=$[${k}*2]
done

11. 스 크 립 트 를 하나 쓰 고 이 몇 가지 함 수 를 씁 니 다.
              함수 1. 주어진 두 수치의 합 을 실현 합 니 다.
              함수 2. 주어진 두 수치의 최대 공약수 추출 하기;
              함수 3. 주어진 두 수치의 최소 공배수 추출 하기;
              함수 에 대한 선택, 두 수치의 크기 는 상호작용 입력 을 통 해 제 공 됩 니 다.
#!/bin /bash
#函数1实现给定的两个数值的之和;
#函数2、取给定两个数值的最大公约数;
#函数3、取给定两个数值的最小公倍数
#;关于函数的选定、两个数值的大小都将通过交互式输入来提供
read -p "请在7秒内输入两个整数:" -t 7 i j
[ -z $i ] && [ -z $j ] && echo "请重新输入两个整数" && exit 0
[ -z "$j" ] && echo "第二个数为空,请输入两个整数" && exit 0
num1=$(echo $i | grep '^[0-9]\+$')
num2=$(echo $j | grep '^[0-9]\+$')
[ -z $num1 ] && [ -z $num2 ] && echo "输入错误,$i,$j不是整数" && exit 0
[ -z $num1 ] && echo "输入错误,$i不是整数" && exit 0
[ -z $num2 ] && echo "输入错误,$j不是整数" && exit 0
 sum() {
          Sum=$[${i}+${j}]
            echo "$i与$j的和为:$Sum"
    }
 max() {
[ $i -eq 0 ] && [ $j -ne 0 ] && echo "$i与$j的最大公约数为:$j" && exit 0
[ $i -ne 0 ] && [ $j -eq 0 ] && echo "$i与$j的最大公约数为:$i" && exit 0
     if [ $i -eq $j ];then
             echo "$i与$j的最大公约数为:$i"
             exit 0
     elif [ $i -gt $j ];then
       for num1 in $(seq $j -1 1);do
          [ $[$i%$num1] -eq 0 ] && [ $[$j%$num1] -eq 0 ] && echo "$i与$j的最大公约数为:$num1" && exit 0
      done
     else
       for num2 in $(seq $i -1 1);do
          [ $[$i%$num2] -eq 0 ] && [ $[$j%$num2] -eq 0 ] && echo "$i与$j的最大公约数为:$num2" && exit 0
        done
      fi
      }
 min() {
   [ $i -eq 0 ] && [ $j -ne 0 ] && echo "$i与$j的最小公倍数为0 " && exit 0
   [ $i -ne 0 ] && [ $j -eq 0 ] && echo "$i与$j的最小公倍数为0" && exit 0
   if [ $i -eq $j ];then
           echo "$i与$j的最小公倍数为:$i" 
           exit 0
   elif [ $i -gt $j ];then
      for num1 in $(seq $i 1 $[$i*$j]);do
      [ $[$num1%$i] -eq 0 ] && [ $[$num1%$j] -eq 0 ] && echo "$i与$j的最小公倍数为;$num1" && exit 0
      done
   else
       for num2 in $(seq $j 1 $[$i*$j]);do
       [ $[$num2%$i] -eq 0 ] && [ $[$num2%$j] -eq 0 ] && echo "$i与$j的最小公倍数为;$num2" && exit 0
       done
   fi
    }
echo
echo " sum表示求输入的两个数之和"
echo " max表示求输入的两个数的最大公约数"
echo " min表示求输入的两个数的最小公倍数"
read -p "请在10秒内输入sum|max|min中任意一个单词:" -t 10 str
[ -z $str ] && echo "请输入sum|max|min中任意一个单词" && exit 0
case $str in
sum)
    sum
     ;;
max)
   max
    ;;
min)
   min
    ;;
*)
  echo "输入错误,请输入sum|max|min中任意一个单词"
  exit 0
esac

                                     

좋은 웹페이지 즐겨찾기