进度记录【Day7】Shell编程

Day 7

图纸和实例的基本关系(实例化)

1. 数据类型和变量

2. 类和对象

  • 类实际上是自定义图纸

3. 函数定义和函数调用

  • 两次函数调用是不一样的

4. 程序和进程

程序,进程,线程之间的关系和区别

Shell语言

1.弱类型变量

python变量为引用,没有类型
shell 语言内核
分组+替换+执行
分组:将一行字符串根据空格分割成多个单词,每个单词就是一个分组,唯一违反此原则的是赋值语句
替换:找到所有的可替换元素,将其替换成值

作业

1.画一行5颗星

#!/bin/sh
line=""
s='\x2a'
n=5
for ((i=0;i<n;i++))
do
  line=$line$s
done
echo -e $line

1结果

2.画5行5颗星

#!/bin/sh
line=""
s='\x2a'
n=5
for ((i=0;i<n;i++))
do
  line=$line$s
done
for ((j=0;j<n;j++))
do
  echo -e $line
done

2结果

3.裁剪出左侧直角的三角形两个

#!/bin/sh
s='\x2a'
for ((y=0;y<5;y++))
do
  line=""
  for ((x=0;x<=y;x++))
  do
    line=$line$s
  done
    echo -e $line
done
for ((y=0;y<5;y++))
do
  line=""
  for ((x=0;x+y<5;x++))
  do
    line=$line$s
  done
    echo -e $line
done

3结果

4.裁剪出右侧直角的三角形两个

#!/bin/sh
for ((y=0;y<5;y++))
do
  line=""
  s='\x20'
  for ((x=0;x<5;x++))
  do
    if ((x==y))
    then
      s='\x2a'
    fi
    line=$line$s
  done
    echo -e $line
done
for ((y=0;y<5;y++))
do
  line=""
  s='\x20'
  for ((x=0;x<5;x++))
  do
    if ((x+y==4))
    then
      s='\x2a'
    fi
    line=$line$s
  done
    echo -e $line
done

4结果

5.画一个等腰三角形

#!/bin/sh
for ((y=0;y<5;y++))
do
  line=""
  s='\x20'
  for ((x=0;x-y<5;x++))
  do
    if ((x+y==4))
    then
      s='\x2a'
    fi
    line=$line$s
  done
    echo -e $line
done

5结果

6.将5平移至屏幕中间位置(引入左右两侧边界的变量)

#!/bin/sh
left=35
right=35
for ((y=0;y<5;y++))
do
  line=""
  s='\x20'
  for ((x=0;x<=right;x++))
  do
    if ((x==left))
    then
      s='\x2a'
    fi
    line=$line$s
  done
    echo -e $line
  ((left--))
  ((right++))
done

6结果

7.画一个平行四边形

#!/bin/sh
left=35
right=45
for ((y=0;y<5;y++))
do
  line=""
  s='\x20'
  for ((x=0;x<=right;x++))
  do
    if ((x==left))
    then
      s='\x2a'
    fi
    line=$line$s
  done
    echo -e $line
  ((left--))
  ((right--))
done

7结果

8.画一个菱形

#!/bin/sh
left=45;right=45
ldlt=-1;rdlt=1;
maxy=9
for ((y=0;y<maxy;y++))
do
  line=""
  s='\x20'
  for ((x=0;x<=right;x++))
  do
    if ((x==left))
    then
      s='\x2a'
    fi
    line=$line$s
  done
    echo -e $line
  if ((y==maxy/2))
  then
    ((rdlt*=-1))
    ((ldlt*=-1))
  fi
  ((left+=ldlt))
  ((right+=rdlt))
done

8结果

9. 将8镂空

#!/bin/sh
left=45;right=45
ldlt=-1;rdlt=1;
maxy=9
for ((y=0;y<maxy;y++))
do
  line=""
  s='\x20'
  for ((x=0;x<=right;x++))
  do
    if ((x==left || x==right))
    then
      s='\x2a'
    else
      s='\x20'
    fi
    line=$line$s
  done
    echo -e $line
  if ((y==maxy/2))
  then
    ((rdlt*=-1))
    ((ldlt*=-1))
  fi
  ((left+=ldlt))
  ((right+=rdlt))
done

9结果

10.制作一个猜数字的游戏:

游戏开始提示用户分别输入最小和最大的数值
程序在最小和最大值之间生成一个随机数
程序循环提示用户猜测这个数字是多少
如果猜中则退出循环
如果用户猜的数字大于前面的随机数,则提示"数字大了"
如果用户猜的数字小于前面的随机数,则提示"数字小于"
循环结束后对循环的次数(也就是用户猜测的次数进行判断)
如果次数>10:提示"您的智商还有很大进化空间"
如果次数>5:提示…

#!/bin/sh
read -p "请输入最小值" min
read -p "请输入最大值" max
num=$[(($RANDOM%$((max-min+1))+min))];
guess=$((min-1))
times=0
while ((1))
do
  read -p "猜数字" guess
  ((times++))
  if ((guess>num))
  then
    echo "数字大了"
  fi

  if ((guess<num))
  then
    echo "数字小了"
  fi

  if ((guess==num))
  then
   echo "猜对了"  
   break
  fi

  done
if ((times>10))
then
  echo "您的智商还有很大进化空间"
elif ((times>5))
then
 echo "不错"
elif ((times>3))
then
  echo "运气不错"
elif((times<3))
then
  echo "真厉害"
fi

10结果

11.打印乘法表

#!/bin/sh
for ((i=1;i<=9;i++))
do
  for ((j=1;j<=9;j++))
  do
    if ((i>=j))
    then
      echo -e -n "${i}*${j}=$((i*j))\t "
    fi
  done
  echo ""
done

乘法口诀表

12.初始化扫雷地图

10*10的棋盘,随机生成10颗地雷,实现游戏的布雷初始化
并且最后将这个棋盘打印出来

  • 方法一
#!/bin/sh
# 读地图
read -p "扫雷地图宽:" width
read -p "扫雷地图高:" high
read -p "地雷个数(小于地图格数):" num
max=$((width*high))
# 初始化数组
for ((y=0;y<high;y++))
do
  for ((x=0;x<width;x++))
  do
    ((temp=x+y*high))
    map[$temp]=0
  done
done

# 生成地雷
n=0
while((n!=num))
do
  temp=$((RANDOM%max))
  if ((map[$temp]==0))
  then
    map[$temp]=1
    ((n++))
  fi
done

# 打印地图
for ((y=0;y<high;y++))
do
  line=""
  for ((x=0;x<width;x++))
  do
    ((temp=x+y*high))
    line=$line' '${map[$temp]}
  done
  echo $line
done

扫雷

获取数组内的值用${array[id]}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值