作者: kukey-admin

  • win清理conda残余

    rd /s/q C:\Users\%USERNAME%\.anaconda
    rd /s/q C:\Users\%USERNAME%\AppData\Roaming\.anaconda
    rd /s/q C:\Users\%USERNAME%\.conda
    rd /s/q C:\Users\%USERNAME%\AppData\Local\conda
    del /s/q C:\Users\%USERNAME%\.condarc

  • win清理python残余

    rd /s/q %USERPROFILE%\AppData\Local\Python
    rd /s/q %USERPROFILE%\AppData\Local\pip
    reg delete “HKCU\Software\Python” /f
    rd /s/q %USERPROFILE%\AppData\Roaming\Python
    rd /s/q %USERPROFILE%\AppData\Roaming\pip

    rd /s/q “C:\Users\%USERNAME%\.ipython”

    rd /s/q “C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Python 3.8”

    rd /s/q “C:\Users\Public\Documents\Python Scripts”

    rd /s/q “C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Python 3.8”

    rd /s/q “C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Python 3.8”

    rd /s/q “C:\Users\rkey\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Python 3.5”

    rd /s/q “C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Python 3.12”

  • flask创建一个database.py,里面只用来创建db,models文件夹下的post.py导入db,app里创建数据库表

    也算是一个避免循环导入的例子吧.

    来源:文心一言,但是我稍有修改.

    在 Flask 项目中,你可以通过以下步骤来组织代码,以便在 database.py 文件中创建数据库连接,并在 models/post.py 文件中定义模型,然后在 Flask 应用中创建数据库表。

    项目结构
    假设你的项目结构如下:

    my_flask_app/
    │
    ├── app.py
    ├── database.py
    ├── models/
    │ └── post.py
    └── ...

    1. 创建 database.py
    在 database.py 文件中,我们将创建一个 SQLAlchemy 数据库实例。
    # database.py

    from flask_sqlalchemy import SQLAlchemy
    db = SQLAlchemy()

    2. 创建 models/post.py
    在 models/post.py 文件中,我们将导入 database.py 中的 db 实例,并定义一个 Post 模型。
    # models/post.py

    from database import db
    from datetime import datetime
    
    class Post(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        title = db.Column(db.String(100), nullable=False)
        content = db.Column(db.Text, nullable=False)
        date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
    
    def __repr__(self):
        return f"Post('{self.title}', '{self.date_posted}')"

    3. 在 app.py 中配置 Flask 应用和数据库
    在 app.py 文件中,我们将配置 Flask 应用,创建数据库连接,并应用迁移来创建数据库表。
    # app.py

    from flask import Flask 
    from flask_sqlalchemy import SQLAlchemy 
    from database import db 
    from models.post import Post 
    app = Flask(__name__)
    
    # 配置数据库 URI
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' # 你可以使用其他数据库,比如 MySQL, PostgreSQL 等
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    # 初始化数据库实例
    db.init_app(app)
    
    @app.route('/')
    def home():
        posts = Post.query.all()
        return f"Home Page<br>{[post.title for post in posts]}"
    
    if __name__ == '__main__':
        # 创建所有表
        with app.app_context():
            db.create_all()
    
        # 运行 Flask 应用
        app.run(debug=True)

    cmd命令提示符里运行以下命令:

    python app.py

    现在,你的 Flask 应用应该能够启动,并且会在 site.db 中创建 post 表。访问 http://127.0.0.1:5000/ 将显示主页,尽管目前还没有任何帖子。

    这样,你就成功地创建了一个 Flask 项目,其中包含数据库连接、模型定义和数据库表创建逻辑。

  • root.wm_iconbitmap()和root.iconbitmap()两个函数有啥区别

    在Tkinter中,root.wm_iconbitmap()root.iconbitmap() 都是用来设置窗口图标的方法,但它们之间存在一些差异:

    1. root.iconbitmap()
      • 这个方法是Tkinter提供的一个接口,用于设置窗口的图标。
      • 它只能加载.ico格式的图标文件,不支持其他格式如.png.jpg
      • 使用方法简单,只需要提供图标文件的路径即可:
        root.iconbitmap("/path/to/your/icon.ico")
    2. root.wm_iconbitmap()
      • 这个方法实际上是root.wm()方法的一个子命令,wm是Tkinter窗口方法(Window Manager)的缩写,用于与窗口管理器进行交互。
      • 它同样用于设置窗口图标,但调用方式与iconbitmap()不同,它需要通过wm方法来调用iconbitmap命令。
      • 使用wm_iconbitmap()时,你需要传递窗口实例和图标文件路径:
        root.wm_iconbitmap("/path/to/your/icon.ico")
      • 这个方法在功能上与iconbitmap()相似,但调用方式更为底层,因为它直接通过Tkinter的wm子系统与窗口管理器通信

    总结来说,root.iconbitmap()root.wm_iconbitmap()都可以设置窗口图标,但iconbitmap()是Tkinter提供的更高层的接口,而wm_iconbitmap()则通过wm子系统提供了一种更为底层的调用方式。在实际使用中,两者的效果相同,但iconbitmap()因其简单易用而更常被使用。

  • pip install -U这个参数-U是啥意思

    pip install -U 命令中的 -U 参数是用于更新指定的包到最新版本。这里的 -U--upgrade 的缩写。当你使用这个参数时,pip 会检查指定包的最新版本,并将其更新到最新版本,如果该包已经是最新版,则不会有任何变化。

    例如,如果你想要更新 requests 包,你可以使用以下命令:

    pip install -U requests

    这会将 requests 包更新到最新版本。如果你没有指定包名,pip install -U 会尝试更新所有已安装的包。

  • python库Nuitka-2.4.11依赖

    nuitka-2.4.11

     

    ordered-set-4.1.0

    zstandard-0.21.0

     


    Collecting nuitka
    Downloading Nuitka-2.4.11.tar.gz (3.7 MB)
    —————————————- 3.7/3.7 MB 1.4 MB/s eta 0:00:00
    Installing build dependencies … done
    Getting requirements to build wheel … done
    Preparing metadata (pyproject.toml) … done
    Collecting ordered-set>=4.1.0 (from nuitka)
    Downloading ordered_set-4.1.0-py3-none-any.whl.metadata (5.3 kB)
    Collecting zstandard>=0.15 (from nuitka)
    Downloading zstandard-0.21.0-cp37-cp37m-win_amd64.whl.metadata (3.0 kB)
    Downloading ordered_set-4.1.0-py3-none-any.whl (7.6 kB)
    Downloading zstandard-0.21.0-cp37-cp37m-win_amd64.whl (659 kB)
    —————————————- 659.7/659.7 kB 6.0 MB/s eta 0:00:00
    Building wheels for collected packages: nuitka
    Building wheel for nuitka (pyproject.toml) … done
    Created wheel for nuitka: filename=Nuitka-2.4.11-cp37-cp37m-win_amd64.whl size=3402958 sha256=aa8e430bd06ad97a6d2eb25fc9e19b7915d2d5b14a0e401245907b8895952af7
    Stored in directory: c:\users\rkey\appdata\local\pip\cache\wheels\8c\89\72\e408cd495b3903ecbad851052183da7c128679edba64c98f50
    Successfully built nuitka
    Installing collected packages: zstandard, ordered-set, nuitka
    Successfully installed nuitka-2.4.11 ordered-set-4.1.0 zstandard-0.21.0

  • C语言】自己写的C语言的时间函数

    写于 2020-10-06 20:37:19,当时发布在csdn上。
    #include<stdio.h>
    #include<time.h>
    int gTime(){
        //获取系统时间
        int year,month,day,hour,minutes,second;
        time_t t = time(NULL);
        year = t/86400/365+1970;
        month = t/86400/30%12+4;
        day = t/86400%30+5;//一天等于86400秒,即3600*24
        hour = t%(3600*24)/3600+8;//加8正好是中国的时区时间的小时,不知道为啥。
        minutes = t%3600/60;
        second = t%60;
            printf("t:%d",t);
    		printf("year:%d",year);
    		printf("month:%d",month);
    		printf("day:%d",day);
    		printf("hour:%d",hour);
    		printf("minutes:%d",minutes);
    		printf("second:%d",second);
    		printf("%d年%d月%d日  %d:%d:%d",year,month,day,hour,minutes,second);
    		return year,month,day,hour,minutes,second;
    }
    以上是C语言获取时间的函数,自己写的。
    想要调用的时候,自己在main函数里调用一下。
  • flask-bt之tracker录入

    templates\trackers_index.html

    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>trackers</title>
    </head>
    <body>
        {% if session.logged_in %}
        <form action="/logout" method="get">
            <input type="submit" value="登出">
        </form>
        {% else %}
        <form action="/login" method="post">
            <input type="text" name="username" placeholder="用户名">
            <input type="password" name="password" id="password" placeholder="密码">
            <input type="submit" value="登录">
        </form>
        {% endif %}
        <main>
            <!-- flask的flash函数专用固定代码 专门用来显示内容的 -->
            {% for message in get_flashed_messages() %}         
                <div class="alert">{{ message }}</div>     
            {% endfor %}
        </main>
        <p>tracker总数量:{{count}}</p>
        <form action="/trackers_search" method="post">
            <input type="text" name="trackers_name" placeholder="请输入tracker关键字">
            <input type="submit" value="搜索">
        </form>
        {% if session.logged_in %}
        <!-- 登录表单,实际上用户已经登录,所以可以显示欢迎信息或其他内容 -->
        <form action="/trackers_add" method="post">
            <label for="trackers_name">trackers_add:</label>
            <input type="text" name="trackers_name" placeholder="请输入完整的tracker链接">
            <input type="submit" value="提交">
        </form>
        <form action="/trackers_delete" method="post">
            <label for="trackers_name">trackers_delete:</label>
            <input type="text" name="trackers_name" placeholder="请输入完整的tracker链接">
            <input type="submit" value="删除">
        </form>
        {% endif %}
    
        <hr>
        <div class="tracker_box scrollable-div">
            <form action="/get_trackers_as_text" method="get">
                <input type="submit" value="去复制,请使用Ctrl+A和Ctrl+C复制">
            </form>
            {% for i in trackers %}
            <ul style="list-style-type: none">
                <li>{{i.name}}</li>
            </ul>
            {% endfor %}
        </div>
    </body>
    </html>
    <style>
        * {
            margin:0;
            padding:0;
        }
        .scrollable-div {
            height: 800px; /* 或者你需要的高度 */
            overflow-y: auto; /* 内容超出时在 y 轴方向显示滚动条 */
            overflow-x: auto; /* 内容超出时在 x 轴方向显示滚动条 */
        }
    </style>

     

    app.py

    from flask import Flask, request, render_template, redirect, url_for, flash, session
    from flask_sqlalchemy import SQLAlchemy
    import os
    from datetime import datetime
    from flask_cors import CORS
    import secrets
    '''
    待实现:
    flash错误提示显示红色,警告信息显示黄色,成功显示绿色,使用div画出来
    '''
    
    app = Flask(__name__)
    # 为整个应用启用 CORS
    CORS(app)
    # 启用 CORS 并设置特定的域名
    #CORS(app, resources={r"/some_route": {"origins": "http://example.com"}})
    
    # 或者,允许所有域名访问所有路由
    CORS(app, resources={r"*": {"origins": "*"}})
    
    # 获取当前文件的路径
    basedir = os.path.abspath(os.path.dirname(__file__))
    # 设置数据库文件的路径为当前目录下的 data.db
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'data.db')
    #app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////data.db'
    
    app.secret_key = secrets.token_urlsafe()  # 用于保持会话安全,字符串随机即可
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False#模型修改的跟踪
    db = SQLAlchemy(app)
    
    class Trackers(db.Model):
       __tablename__= 'trackers'
       id = db.Column(db.Integer, unique=True, comment='id')
       name = db.Column(db.String(64), primary_key=True, comment='Trackers,主键')
       is_usable = db.Column(db.String(64), unique=False, comment='Tracker是否可用')
       create_date = db.Column(db.DateTime, unique=False, default=datetime.now(), comment='Tracker创建日期')
       update_date = db.Column(db.DateTime, unique=False, comment='Tracker更新日期')
       def __repr__(self):
          return '<Trackers %r>' % self.name
    
    def create_tables():
        with app.app_context():
            db.create_all()
    
    
    @app.route('/')
    @app.route('/trackers_index')
    def trackers_index():
        trackers = Trackers.query.order_by(Trackers.create_date.desc()).all()#倒序输出所有
        count = Trackers.query.count()#tracker总数量
        return render_template('trackers_index.html', trackers=trackers, count=count)
    
    
    @app.route('/get_trackers_as_text')
    def get_trackers_as_text():
        trackers = Trackers.query.all()
        lines = [f"{tracker.name}" for tracker in trackers]
        text = "<br>".join(lines)
        return text
    
    
    @app.route('/trackers_add', methods=['POST'], endpoint='add_announcement')
    def announcement_add():
        trackers_name = request.form['trackers_name']
        # 关键词列表
        keywords = ['announce', 'http', 'udp', 'https', 'wss']
        # 检查字符串是否包含列表中的任意关键词
        if contains_keywords(trackers_name, keywords) or trackers_name.endswith('announce'):
            print("提交信息中包含关键字")
        else:
            flash("你提交的可能不是tracker链接")
            return redirect(url_for('trackers_index'))
        exists = Trackers.query.filter_by(name=trackers_name).first() is not None
        if exists:
            flash('tracker 已经存在.')
        else:
            flash('tracker 不存在,已插入.')
            new_tracker = Trackers(name=trackers_name)
            db.session.add(new_tracker)
            db.session.commit()
        return redirect(url_for('trackers_index'))
    
    def contains_keywords(s, keywords):
        return any(keyword in s for keyword in keywords)
    
    @app.route('/trackers_delete/<int:trackers_name>', methods=['POST'], endpoint='delete_announcement_specific')
    def delete_announcement_specific(trackers_name):
        data = Trackers.query.filter_by(name=trackers_name).first()
        if data:
            db.session.delete(data)
            db.session.commit()
            flash(f'【{data}】已删除')
            return redirect(url_for('trackers_index'))
        else:
            return 'Tracker not found'
    
    @app.route('/trackers_delete', methods=['POST'], endpoint='delete_announcement')
    def delete_announcement():
        trackers_name = request.form.get('trackers_name') or request.view_args.get('trackers_name')
        if not trackers_name:
            return '什么都没输入,你删除啥呢!!!'
        data = Trackers.query.filter_by(name=trackers_name).first()
        if data:
            db.session.delete(data)
            db.session.commit()
            flash(f'{data}已删除')
            return redirect(url_for('trackers_index'))
        else:
            return f'数据库中不存在该数据!!!{trackers_name}'
        
    
    @app.route('/trackers_update/<int:trackers_name>', methods=['POST'], endpoint='update_announcement')
    def announcement_update(trackers_name):
        data = Trackers.query.filter_by(name=trackers_name).first()
        if data:
            data.name = request.form.get('name')
            data.is_usable = request.form.get('description')
            db.session.commit()
            flash('Data has been updated successfully.', 'success')
        else:
            flash('Data not found.', 'error')
        return redirect(url_for('trackers_index'))
    
    
    @app.route('/trackers_search', methods=['GET', 'POST'])
    def announcement_search():
        if request.method == 'POST':
            trackers_name = request.form.get('trackers_name')
            trackers = Trackers.query.filter(Trackers.name.like(f'%{trackers_name}%')).all()
            return render_template('trackers_index.html', trackers=trackers)
        return render_template('trackers_index.html')
    
    
    @app.route('/login', methods=['GET', 'POST'])
    def login():
        if request.method == 'POST':
            username = request.form['username']
            password = request.form['password']
            if username == 'admin' and password == 'admin':
                session['logged_in'] = True
                session['username'] = username
                flash("登陆成功")
                return redirect(url_for('trackers_index'))
            else:
                return '无效的用户名或密码'
        return redirect(url_for('trackers_index'))
    
    
    @app.route('/logout', methods=['GET', 'POST'])
    def logout():
        session.pop('logged_in', None)
        session.pop('username', None)
        return redirect(url_for('trackers_index'))
    
    
    if __name__ == '__main__':
        # 创建数据库
        create_tables()
        app.run(debug=True, host='0.0.0.0', port=5000)

     

  • certbot自动续签脚本学习

    暂时没写完,以后有时间再写。也算是学习了一下linux的shell脚本了。使用的Centos7系统的bash版本信息如下:

    GNU bash, 版本 4.2.46(2)-release (x86_64-redhat-linux-gnu)
    Copyright (C) 2011 Free Software Foundation, Inc.
    许可证 GPLv3+: GNU GPL 许可证版本3或者更高 <http://gnu.org/licenses/gpl.html>
    
    这是自由软件,您可以自由地更改和重新发布。
    在法律允许的范围内没有担保.

     

    现在已经写了日期判断。

    往后要写的内容是:关闭网站的nginx,然后执行续签的命令,但是现在想不到如何进行续签自动化,因为现在使用的txt解析记录的方式续签的,解析记录需要到域名服务商网站登录这一步很难搞定。

    #!/bin/bash
    
    # 证书文件路径
    CERT_PATH="/etc/letsencrypt/live/kuyour.top/fullchain.pem"
    
    # 获取证书到期日期
    NOT_AFTER=$(openssl x509 -in "$CERT_PATH" -text -noout | grep "Not After" | sed 's/^[ \t]*//;s/[ \t]*$//')
    echo "证书到期时间:"$NOT_AFTER
    
    due_date=$(date -d "${NOT_AFTER:12:20}" +%s)
    #echo $due_date
    
    # 获取当前时间的时间戳
    current_timestamp=$(date +%s)
    #echo $current_timestamp
    
    # 计算时间差
    time_difference=$(($due_date-$current_timestamp))
    days_remaining=$(($time_difference/60/60/24))
    echo "当前距离证书到期的剩余天数:"$days_remaining
    
    echo  $(($days_remaining == 1))
    echo $((1==1))
    
    # 检查剩余天数是否等于1
    if [ $days_remaining -eq 1 ]; then
        echo "剩余天数等于1,执行某些指令"
        # 在这里放置你想要执行的指令
    else
        echo "剩余天数不等于1,不执行指令"
    fi

     

  • bash脚本学习

    date -d 命令可以把类似这样的日期时间转换成时间戳”Jan 28 16:47:16 2025″,它会计算自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数。

    命令如下:

    date -d "Jan 28 16:47:16 2025" +%s

    请严格按照这种格式进行填写,双引号后面有一个空格不能省略。

    如果想要把这个日期变成可替换的,可以把整个命令使用小括号括起来,前面加上$符号,例如:

    NOT_AFTER="Jan 28 16:47:16 2025"
    timestamp=$(date -d "$NOT_AFTER" +%s)
    echo $timestamp

    以上代码有几点需要注意:

    • bash脚本不兴有多余的空格,变量声明(变量的创建)时,等号两边不允许有空格。
    • 获取变量要在变量名的前面加$符号。
    • 如果整个命令执行的值要赋值给另一个变量(不管是新的变量还是旧的变量),可以把整个命令使用小括号括起来,然后前面加一个$符号就行。

     

    字符串转数字,使用$(( ))把内容括起来,里面的内容会被自动识别为数值计算逻辑运算,注意是双括号,且都是小括号。例如:

    NOT_AFTER="Jan 28 16:47:16 2025"
    timestamp=$(date -d "$NOT_AFTER" +%s)
    days_remaining=$(($timestamp/60/60/24))
    echo $days_remaining

     

    逻辑表达式

    bash脚本的逻辑表达式中,字符串比较通常使用==!= ,数值比较通常使用 -eq (等于)和 -ne(不等于),这是因为 Bash 从 Unix shell 继承了这些比较运算符,而 Unix shell 中并没有为整数比较提供 ==!= 运算符。

    以下是 Bash 中字符串和整数比较的区别:

    • 字符串比较:

      if [ "$string1" == "$string2" ]; then
          echo "字符串相等"
      fi
      
      if [ "$string1" != "$string2" ]; then
          echo "字符串不相等"
      fi
    • 整数比较:

      if [ "$int1" -eq "$int2" ]; then
          echo "整数相等"
      fi
      
      if [ "$int1" -ne "$int2" ]; then
          echo "整数不相等"
      fi

    如果你尝试使用 == 来比较整数,Bash 会将其视为字符串比较,这可能会导致意外的结果,特别是当整数变量包含前导零或不同的位数时。例如:

    int1=08
    int2=8
    
    if [ "$int1" == "$int2" ]; then
        echo "相等"  # 这会输出“相等”,因为 Bash 将它们视为字符串比较,而 "08" 和 "8" 作为字符串是不相等的。
    fi
    
    if [ "$int1" -eq "$int2" ]; then
        echo "相等"  # 这不会输出任何内容,因为作为整数,08 和 8 是不相等的。
    fi

    因此,为了正确地比较整数,你应该使用 -eq-ne 运算符。

    逻辑表达式中整数比较不加引号也行

    在 Bash 脚本中,是否在条件测试 [ ... ] 中对变量使用引号取决于具体情况。对于整数比较,通常可以不加引号,因为整数变量不包含空格或其他特殊字符,这些字符可能会导致条件测试被错误解析。然而,使用引号是一种更保守的做法,可以防止一些潜在的问题,特别是在变量值未知或可能为空的情况下。

    以下是两种情况的比较:

    使用引号:

    if [ "$int1" -eq "$int2" ]; then
        echo "整数相等"
    fi

    不使用引号:

    if [ $int1 -eq $int2 ]; then
        echo "整数相等"
    fi

    在第二种情况中,如果你的变量 $int1$int2 为空,或者包含空格、特殊字符等,那么条件测试可能会出错。例如:

    int1=""
    int2=5
    
    if [ $int1 -eq $int2 ]; then
        echo "整数相等"  # 这将导致条件测试语法错误,因为 -eq 两边不能有空的参数。
    fi

    为了避免这类问题,推荐在条件测试中总是使用引号,除非变量的内容是已知的,并且不包含任何可能导致解析错误的字符。使用引号是一种好的编程习惯,可以提高脚本的健壮性和可移植性。

     

    if语句基础

    基本if语句命令判断如果特定条件为true,则仅执行给定的一组操作。如果条件为false,则不要执行这些操作。if语句基本语法格式如下:

    if [ expression ];  
    then  
    statements  
    fi

    仅当表达式(在方括号之间)为真时,才会执行thenfi之间的语句。

    注意:观察第一行中使用的空格,在第一行末尾使用分号。两者都必须使用,if条件语句以fi结尾。

     

    • 使用AND运算符使用多个条件:
      if [ expression_1 ] && [ expression_2 ];  
      then  
      statements  
      fi
      
      Bash
    • 使用OR运算符使用多个条件:
      if [ expression_1 ] || [ expression_2 ];  
      then  
      statements  
      fi
      
      Bash
    • 对于具有AND&OR运算符的复合表达式,可以使用以下语法:
      if [ expression_1 && expression_2 || expression_3 ];  
      then  
      statements  
      fi

    //更多请阅读:https://www.yiibai.com/bash/bash-if-statement.html

    示例1

    在此示例中,读取用户输入任意数字,并检查该值是否大于100

    脚本文件:if-example1.sh

    #!/bin/bash  
    
    read -p " Enter number : " number  
    
    if [ $number -gt 100 ]  
    then  
    echo "Value is greater than 100"  
    fi
    执行上面示例代码,得到以下结果:

    示例2

    在此示例中,通过比较两个字符串的值,简单演示了if语句的用法。
    脚本文件:if-example2.sh

    #!/bin/bash  
    
    # if condition is true  
    if [ "yiibai" == "yiibai" ];  
    then  
    echo "true condition"  
    fi  
    
    # if condition is false  
    if [ "yiibai.com" == "xntutor.com" ];  
    then  
    echo "false condition"  
    fi
    
    Bash

    执行上面示例代码,得到以下结果:

     

    示例3

    在此示例中,演示如何使用if语句比较数字。
    脚本文件:if-example3.sh

    #!/bin/bash  
    
    #if condition (greater than) is true  
    if [ 10 -gt 3 ];  
    then  
    echo "10 is greater than 3."  
    fi  
    
    #if condition (greater than) is false  
    if [ 3 -gt 10 ];  
    then  
    echo "3 is not greater than 10."  
    fi  
    
    #if condition (lesser than) is true  
    if [ 3 -lt 10 ];  
    then  
    echo "3 is less than 10."  
    fi  
    
    #if condition (lesser than) is false  
    if [ 10 -lt 3 ];  
    then  
    echo "10 is not less than 3."  
    fi  
    
    #if condition (equal to) is true  
    if [ 10 -eq 10 ];  
    then  
    echo "10 is equal to 10."  
    fi  
    
    #if condition (equal to) is false  
    if [ 10 -eq 9 ];  
    then  
    echo "10 is not equal to 9"  
    fi
    
    Bash

    执行上面示例代码,得到以下结果:
    示例3

     

    示例4

    在此示例中,将演示如何在if表达式中使用AND运算符包括多个条件。

    脚本文件:if-example4.sh

    #!/bin/bash  
    
    # TRUE && TRUE  
    if [ 8 -gt 6 ] && [ 10 -eq 10 ];  
    then  
    echo "Conditions are true"  
    fi  
    
    # TRUE && FALSE  
    if [ "mylife" == "mylife" ] && [ 3 -gt 10 ];  
    then  
    echo "Conditions are false"  
    fi
    
    Bash

    执行上面示例代码,得到以下结果:

    maxsu@ubuntu:~/bashcode$ vi if-example4.sh
    maxsu@ubuntu:~/bashcode$ chmod +x if-example4.sh
    maxsu@ubuntu:~/bashcode$ ./if-example4.sh 
    Conditions are true
    maxsu@ubuntu:~/bashcode$