linux命令12(shell编程)

1.shell编程

,将基本的shell命令,存放到一个文件中,然后执行这个文件,完成相应的功能。

2.如何写一个shell编程并能够运行

创建文件夹,mkdir myshell,创建文件vim firstshell

s1:vi或vim编辑shell命令文件

#!/bin/sh
var="Hello world!"
echo $var
  1. #!/bin/sh 解释器声明(释伴行)

    • 作用:告诉系统用 /bin/sh 解释器来运行这个脚本,必须写在文件第一行。
    • /bin/sh 是系统标准 Bourne Shell 解释器,兼容 bash 基础语法。
  2. var="Hello world!" 变量赋值

    • 定义字符串变量var,值为Hello world!
    • Shell 赋值规则:等号左右不能有空格;带空格的字符串必须用双引号包裹。
  3. echo $var 输出变量

    • echo:打印输出命令
    • $var:取变量var里面存储的值,打印到终端

s2:修改文件的权限:可执行  chmod u+x firstshell

s3:执行shell程序文件 ./文件名

3.shell命令:

(1)echo 内容

将内容输出到终端

(2)read 变量

从标准的输入设备读入读取内容,赋值给变量

(3)echo 内容>文件名

,将内容重定向到文件中,没有文件可以创建文件

--------------------------

(4)条件测试:

$?测试上一条是否正确,若正确则$?为0,否则为非0

#!/bin/sh
read age
expr $age + 1 &>/dev/null
if [ $? -ne 0 ];then
        echo "You should input a number."
else
        echo "Good"
fi

  1. #!/bin/sh 释伴行,声明使用 /bin/sh 标准 shell 解释器运行脚本,必须放在文件首行。

  2. read age 交互式输入命令:脚本运行到此处暂停,等待键盘输入内容,输入回车后,内容存入变量 age

  3. expr $age + 1 &>/dev/null

  • expr:shell 整数运算工具,仅能计算纯数字;如果$age是字母、符号,这条命令会执行失败。
  • $age + 1:尝试对输入值做 + 1 运算,+左右空格符合 expr 语法规范。
  • &>/dev/null:将这条命令的标准输出、错误输出全部丢入空设备(屏蔽打印信息);⚠️ 这是 bash 专属语法,纯 POSIX sh 兼容写法为 expr $age + 1 >/dev/null 2>&1
  1. if [ $? -ne 0 ];then
  • $?:特殊内置变量,保存上一条命令(expr)的执行返回值:执行成功返回0,失败返回非 0 数字。
  • [ ]:等价于test判断命令,[ $? -ne 0 ]含义:判断返回值不等于 0(即 expr 运算失败)。
  • -ne:shell 数值比较运算符,全称 not equal(不等于)。
  1. echo "You should input a number." 如果 expr 运算失败(输入不是数字),打印提示文字:你应当输入一个数字。

  2. else 分支:expr 运算成功(输入是合法数字)时执行。

  3. echo "Good" 输入数字合法时,输出 Good。

  4. fi if 判断语句的结束标记,if 开头必须 fi 收尾。


场景 1:输入纯数字

plaintext

[root@localhost myshell]# ./firstshell3
25
Good

expr 25 +1执行成功 → $?=0 → 不满足-ne 0,走 else 分支输出 Good。

场景 2:输入字母 / 符号

plaintext

[root@localhost myshell]# ./firstshell3
abc
You should input a number.

expr abc +1识别不了字母,执行失败 → $?≠0,走 if 分支输出报错提示。

(5)[测试表达式]

                -e 文件名                :测试文件是否存在,若存在则为真

                -d 目录                     :测试目录是否存在,若存在则为真

(6)[测试表达式]

测试表达式中的关系

                                                -ne: not equal 判断是否不相等

                                                -eq:equal判断是否相等

                                                -gt:greater判断是否大于

                                                -ge:greater or equal 大于或等于

                                                -lt:less than 判断是否小于 <

                                                -le:less or equal判断是否小于等于<=

分支流程类:

(7)分支语句

                        if 条件测试命令

                        then 

                                条件为真的时候,要执行的代码

                        else

                                条件 false的时候,要执行的代码

                        fi

或者

    if 条件测试命令; then 

                                条件为真的时候,要执行的代码

                        else

                                条件 false的时候,要执行的代码

                        fi

4.最后练习代码

sh

#!/bin/sh
num=$(RANDOM%61)
echo "The answer is " $num
usleep 1000000

input(){
    read -p "Please enter your number:" price
    expr $price + 1 &>/dev/null
    if [ $? -ne 0 ];then
        echo "Please enter an integer!"
        input
    fi
}

guess(){
    if [ $price -eq $num ];then
        echo "Good, you are clever!"
        exit 0
    elif [ $price -gt $num ];then
        echo "Too large!"
        input
    else
        echo "Too small!"
        input
    fi
}

main(){
    input
    while true
    do
        guess
    done
}

main

  1. 随机答案生成

sh

num=$(RANDOM%61)
echo "The answer is " $num
usleep 1000000
  • $RANDOM:shell 内置随机数变量(0~32767)
  • %61:取模,生成范围 0 ~ 60 的随机整数存入num(谜底数字)
  • usleep 1000000:暂停 1 秒(1000000 微秒)
  1. input () 函数:输入 + 数字合法性校验

sh

input(){
    read -p "Please enter your number:" price
    expr $price + 1 &>/dev/null
    if [ $? -ne 0 ];then
        echo "Please enter an integer!"
        input
    fi
}
  • read -p:带提示文字接收用户输入,存入price
  • expr $price +1:校验输入是否为纯整数;非数字时命令执行失败
  • 递归调用:输入非法就重新执行 input,直到拿到合法数字
  1. guess () 函数:大小比对判断

sh

guess(){
    if [ $price -eq $num ];then
        echo "Good, you are clever!"
        exit 0
    elif [ $price -gt $num ];then
        echo "Too large!"
        input
    else
        echo "Too small!"
        input
    fi
}
  • -eq:数值相等;猜对直接exit 0结束脚本
  • -gt:大于;猜大了提示,重新输入
  • else:猜小了提示,重新输入
  1. main () 主调度函数

sh

main(){
    input
    while true
    do
        guess
    done
}
main
  • 先执行一次输入
  • while true 无限循环调用 guess,持续猜数字直到猜对退出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值