1、该系列为ACWing中Linux基础课,已购买正版,课程作者为yxc
2、为啥写在这儿,问就是oneNote的内存不够了QAQ
3、shell语法好多呀笔记写的我yue出来了
Shell语法(三)
判断语句
if…then形式
判断的是condation的exit code
1、单层if
if condition
then
语句1
语句2
...
fi
示例
a=3
b=4
if [ "$a" -lt "$b" ] && [ "$a" -gt 2 ]
then
echo ${a}在范围内
fi
============================================
3在范围内
2、单层if-else
if condition
then
语句1
语句2
...
else
语句1
语句2
...
fi
示例:
a=3
b=4
if ! [ "$a" -lt "$b" ]
then
echo ${a}不小于${b}
else
echo ${a}小于${b}
fi
==========================
3小于4
3、多层if-elif-elif-else
if condition
then
语句1
语句2
...
elif condition
then
语句1
语句2
...
elif condition
then
语句1
语句2
else
语句1
语句2
...
fi
示例:
a=4
if [ $a -eq 1 ]
then
echo ${a}等于1
elif [ $a -eq 2 ]
then
echo ${a}等于2
elif [ $a -eq 3 ]
then
echo ${a}等于3
else
echo 其他
fi
==============================
其他
case…esac形式
case $变量名称 in
值1)
语句1
语句2
...
;; # 类似于C/C++中的break
值2)
语句1
语句2
...
;;
*) # 类似于C/C++中的default
语句1
语句2
...
;;
esac
示例:
a=4
case $a in
1)
echo ${a}等于1
;;
2)
echo ${a}等于2
;;
3)
echo ${a}等于3
;;
*)
echo 其他
;;
esac
==============================
其他
循环语句
1、for…in…do…done
for var in val1 val2 val3
do
语句1
语句2
...
done
示例:
ls是用字符串的形式返回文件名;
seq
命令可以返回一个序列;
输出a 2 cc,每个元素一行:
for i in a 2 cc
do
echo $i
done
==================分割线=================
输出当前路径下的所有文件名,每个文件名一行:
for file in `ls`
do
echo $file
done
==================分割线=================
输出1-10
for i in $(seq 1 10)
do
echo $i
done
==================分割线=================
使用{1..10} 或者 {a..z}
for i in {a..z}
do
echo $i
done
2、for ((…;…;…)) do…done
for ((expression; condition; expression))
do
语句1
语句2
done
示例:
输出1-10,每个数占一行:
for ((i=1; i<=10; i++))
do
echo $i
done
3、while…do…done循环
while condition
do
语句1
语句2
...
done
示例:
文件结束符为Ctrl+d,输入文件结束符后read指令返回false
while read name
do
echo $name
done
4、until…do…done循环
当条件为真时结束:
until condition
do
语句1
语句2
...
done
示例:
当用户输入yes或者YES时结束,否则一直等待读入
until [ "${word}" == "yes" ] || [ "${word}" == "YES" ]
do
read -p "Please input yes/YES to stop this program: " word
done
5、break命令
跳出当前一层循环,注意与C/C++不同的是:break不能跳出case语句,只能跳出当前该层循环。
示例:
每读入非EOF的字符串,会输出一遍1-7
while read name
do
for ((i=1;i<=10;i++))
do
case $i in
8)
break
;;
*)
echo $i
;;
esac
done
done
该程序可以输入Ctrl+d
文件结束符来结束,也可以直接用Ctrl+c杀掉该进程。
6、continue命令
跳出当前该层循环:
该程序输出1-10中的所有奇数。
for ((i=1;i<=10;i++))
do
if [ `expr $i % 2` -eq 0 ]
then
continue
fi
echo $i
done
7、死循环的处理方式
如果终端可以打开该程序,则输入Ctrl+c
即可(参考y总第一次删库)。
否则可以直接关闭进程:
ps aux
返回当前打开的所有进程;- 使用
top
命令找到进程的PID (查看当前系统运行的所有进程),shift M
按照内存排序; - 输入
kill -9 PID
即可关掉此进程
未完待续;
我啥时候才能学到搭平台啊,哭了QAQ