linux中脚本return,Shell脚本return、echo、printf

ehco和return

return  返回的是状态码,函数结束return不返回函数返回值可以在前面用 echo 返回函数返回值,return 返回指定函数退出状态码

echo  返回的是函数返回值,函数退出状态码是函数最后一条命令的退出状态码

test1.sh#!/bin/bash

function test(){

echo 200

}

ret=$(test)

echo "####$?"

echo "***********$ret"

2141b24d2258fd8f2151c44cc26007e7.png

test2.sh#!/bin/bash

function test(){

return 200

}

ret=$(test)

echo "####$?"

echo "***********$ret"

6186b2d7b08626bc5cf9925c54cca0ac.png

就bash而言, return命令只能用在函数中,不能直接用在脚本中

内置命令return用于从函数中返回, ..., return命令在函数中不是必须的,函数被调用时,函数内的命令执行完成后自然会返回到调用它的地方(一般是返回到主程序)。如果某函数中有return命令,执行到return时就返回。如果return在函数中不是最后一条命令,那么return后面的其他命令不再执行。

ehco和printf

终端打印的常用命令有 echo 和 printf 两种

1、echo Hello Word !

这种方法不能打印分号,因为分号在shell里被用作命令界定符,标记一个命令的结束。

ca2b3e57dd4252b32fa6fc5e1d34b454.png

2、 echo 'Hello Word !'

单引号的打印方式打印不了变量。

f6c93706cc862d5e7672151512f23430.png

3、echo "Hello World"

双引号中不能直接打印感叹号,需加set +H

52033c92d500a6bb05fa15edb5242c9c.png

echo 的参数

-e:识别输出内容里的转义序列

948c48566cc7a87e32a97afab68e4e4e.png

-n:忽略结尾的换行

50bdacaf33d2b4000cd68cbc820fe685.png

关于printf,须说明的两点是

1.printf的默认输出没有换行,换行需要自己加“\n”

2.printf支持格式化输出

《完》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 shell 脚本 2048 小游戏,你可以在终端运行它: ```shell #!/bin/bash # 初始化游戏 declare -A board score=0 gameover=false function init_board { for i in {0..3}; do for j in {0..3}; do board[$i,$j]=0 done done add_number add_number } function add_number { local empty=() for i in {0..3}; do for j in {0..3}; do if [[ ${board[$i,$j]} -eq 0 ]]; then empty+=($i,$j) fi done done if [[ ${#empty[@]} -gt 0 ]]; then local idx=$(( RANDOM % ${#empty[@]} )) local pos=${empty[$idx]} local val=$(( RANDOM % 2 * 2 + 2 )) board[${pos%,*},${pos#*,}]=$val fi } function move_left { local moved=false for i in {0..3}; do for j in {1..3}; do local k=$j while [[ $k -gt 0 && ${board[$i,$((k-1))]} -eq 0 ]]; do board[$i,$((k-1))]=${board[$i,$k]} board[$i,$k]=0 k=$((k-1)) moved=true done if [[ $k -gt 0 && ${board[$i,$((k-1))]} -eq ${board[$i,$k]} ]]; then board[$i,$((k-1))]=$(( ${board[$i,$k]} * 2 )) score=$((score + ${board[$i,$((k-1))]})) board[$i,$k]=0 moved=true fi done done $moved } function move_right { local moved=false for i in {0..3}; do for j in {2..0..-1}; do local k=$j while [[ $k -lt 3 && ${board[$i,$((k+1))]} -eq 0 ]]; do board[$i,$((k+1))]=${board[$i,$k]} board[$i,$k]=0 k=$((k+1)) moved=true done if [[ $k -lt 3 && ${board[$i,$((k+1))]} -eq ${board[$i,$k]} ]]; then board[$i,$((k+1))]=$(( ${board[$i,$k]} * 2 )) score=$((score + ${board[$i,$((k+1))]})) board[$i,$k]=0 moved=true fi done done $moved } function move_up { local moved=false for j in {0..3}; do for i in {1..3}; do local k=$i while [[ $k -gt 0 && ${board[$((k-1)),$j]} -eq 0 ]]; do board[$((k-1)),$j]=${board[$k,$j]} board[$k,$j]=0 k=$((k-1)) moved=true done if [[ $k -gt 0 && ${board[$((k-1)),$j]} -eq ${board[$k,$j]} ]]; then board[$((k-1)),$j]=$(( ${board[$k,$j]} * 2 )) score=$((score + ${board[$((k-1)),$j]})) board[$k,$j]=0 moved=true fi done done $moved } function move_down { local moved=false for j in {0..3}; do for i in {2..0..-1}; do local k=$i while [[ $k -lt 3 && ${board[$((k+1)),$j]} -eq 0 ]]; do board[$((k+1)),$j]=${board[$k,$j]} board[$k,$j]=0 k=$((k+1)) moved=true done if [[ $k -lt 3 && ${board[$((k+1)),$j]} -eq ${board[$k,$j]} ]]; then board[$((k+1)),$j]=$(( ${board[$k,$j]} * 2 )) score=$((score + ${board[$((k+1)),$j]})) board[$k,$j]=0 moved=true fi done done $moved } function print_board { clear echo -n "Score: $score" for i in {0..3}; do echo for j in {0..3}; do printf "%4s" ${board[$i,$j]} done done echo } function check_gameover { for i in {0..3}; do for j in {0..3}; do if [[ ${board[$i,$j]} -eq 0 ]]; then return fi if [[ $i -lt 3 && ${board[$i,$j]} -eq ${board[$((i+1)),$j]} ]]; then return fi if [[ $j -lt 3 && ${board[$i,$j]} -eq ${board[$i,$((j+1))]} ]]; then return fi done done gameover=true } function play_game { init_board while ! $gameover; do print_board read -s -n1 dir case $dir in a) move_left;; d) move_right;; w) move_up;; s) move_down;; *) continue;; esac add_number check_gameover done print_board echo "Game over! Your score is: $score" } play_game ``` 运行时,你可以通过输入a、s、d、w来控制方块的移动。注意,脚本需要在支持 Bash 的终端运行。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值