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要去写主席树了嗷嗷嗷嗷嗷嗷嗷嗷嗷

浙公网安备 33010602011771号