shell 脚本大学习

前言

  • msjing在学对拍,发现可以用脚本写,于是学学基础语法

你们这群搞计算机的真是编泰,还是卒控,天天说什么脚本脚本的

  • Waring!以下内容均在 NOI Linux 上进行操作,Windows请慎用,wang79电脑差点被msjing玩炸了

基础

  • shell 的运行需要解释器,e,不会安装,机房电脑有
  • shell 不需要进行编译,在 Linux 下需要给它可运行权限:chmod +x 1.sh

声明

  • 像 C++ 一样,shell 同样需要声明,告诉计算机用什么解释
#!/bin/bash
  • 通过这个声明,计算机就知道怎么解释了

变量

声明

  • 变量声明和 Python 很像,直接声明
a=10
  • 你也可以让它等于滚木,输出也会是滚木

引用

  • 在变量前加一个 $
$a

读写

  • 读入很方便,就是 read
read a
  • 输出是 echo,格式为:
echo "hello world"
a=10
echo "$a"
a=10
echo "oiiaoiia $a"
  • printf 很像
  • unset:清除变量
  • 如果你清除后再输出,就会输出滚木
  • read 也支持多个变量一起读
a=
b=
c=
read a b c
echo "$a $b $c"

选择结构

\(if\)

  • 这个好像和 C++ 类似,看看格式
if [...]; then
    ...
else
    ...
fi
if [...]; then
    ...
elif [...]; then
    ...
else
    ...
fi
  • 的确很像

  • 判断符号如下

-eq
# 相等
-ne
# 不等
-gt
# 大于
-ge
# 大于等于
-lt
# 小于
-le
# 小于等于
  • 这个和 \(\LaTeX\) 很像
  • 注意!中括号和语句间需要打空格要不然报错
a=
b=
read a b

if [ "$a" -gt "$b" ]; then
    echo ">"
elif [ "$a" -lt "$b" ]; then
    echo "<"
else
    echo "="
fi
  • 当然,也支持字符串
[ -z s ]
# 空为1
[ -n s ]
# 非空为1
[ s ]
# 非空为1
[ s1 == s2 ]
[ s1 != s2 ]
[ s1 < s2 ]
[ s1 > s2 ]
# 同 C++
  • 作为指令型代码,可以进行文件判断,给 \(5\) 个常用的
[ -a file ]
# 存在为1
[ -f file ]
# 普通文件为1
[ -r file ]
# 可读为1
[ -w file ]
# 可写为1
[ -x file ]
# 可执行为1
  • 逻辑操作也支持
!
# 逻辑非 C++:!
-a
# 逻辑与 C++:&&
-o
# 逻辑或 C++:||
  • 也可以用 &&|| 对两个条件合并
[ a ] && [ b ]
[ a ] || [ b ]
  • 还有 shell 特有的双小括号和双中括号:(())[[]]
  • 这俩学名叫数学表达式字符串处理函数
  • 其实你只需要知道你在双小括号里可以像 C++ 一样直接写大于小于就行
a=
b=
read a b
if (( a == b )); then
    echo "1"
else
    echo "0"
fi
  • 选择就到这了,呼呼呼

循环结构

\(for\)

  • 这个和 C++ 更像了
  • 你用 (()) 然后就按 C++ 写
  • 先介绍一个指令:declare -i,e,就是把变量变成 int
declare -i sum=0
declare -i i=
for (( i=0;i<=100;i++ ))
do
    sum="$sum+1";
done
echo "$sum"
  • 欸,这不就是 C++ 吗

\(while\)

  • 和 C++ 的也几乎没啥区别
declare -i i
while [ "$i" != "10" ]
do
    i="i+1";
done
echo "$i"

\(until\)

  • 这个 C++ 好像没有
  • 这个和 \(while\) 反过来,括号条件成立出循环,这个挺好用
until [ "$i" = "10" ]
do
    i="i+1";
done
echo "$i"

\(continue\) & \(break\)

  • 和 C++ 一致
  • 循环也没有了,好累

函数

function name ()
{}
name ()
{}
  • 给个示例看看,要不然根本不会
快速幂
#!/bin/bash

function power ()
{
    declare -i res=1;
    while [ "$b" -gt "0" ];
    do
        if (( $(( b % 2 )) == 1 )); then
            res=$(( res * a ));
            res=$(( res % p ));
        fi
        a=$(( a * a ));
        a=$(( a % p ));
        b=$(( b / 2 ));
    done
    return $res
}

declare -i a=
declare -i b=
declare -i p=1000000007
read a b
power a b
echo "$?"
  • $? 是查看上一个指令的返回值,即 power 函数的返回值
  • 为什么会有人用脚本写快速幂

后话

  • shell 基础学习就到这了,进阶以后再说,msjing要去写主席树了嗷嗷嗷嗷嗷嗷嗷嗷嗷
posted @ 2026-08-18 17:12  msjing  阅读(5)  评论(0)    收藏  举报