Linux-2020-spring-5-6
跳到导航
跳到搜索
复习
遗留问题:同时做很多文件的覆盖: 2000/01/2000-01-25.output.txt -> 2000/01/2000-01-25.txt(用前者来覆盖后者)
shell 脚本
shell脚本我有讲义,可以看。
script脚本
program程序
code代码
解释型语言特点:
1.解释器(interpreter)按语句逐条执行
2.语法/运行时的错误只有执行到的时候才会报
3.优化的余地不大
编译型语言特点
1.编译器一次性读入源代码,编译(compile)每一个.c文件-->.o文件(二进制文件、机器代码),链接(link)*.o --> .exe
2.语法错误立刻报
3.优化可以很充分
一般来说,解释型语言写的程序叫做脚本。(脚本特点:小)
shell中数据类型有两种:Integer和String
(默认都是String,在没有歧义的情况下不用加引号)
ex. v="I love teaching"
赋值语句:x=3(等号左右不能有空格)y=5
$:取值符 用法${}(当不歧义时不用加{})
echo $x
字符串拼接:k=$x$y
数值运算:k=$(($x+$y))
思考:
m="$x+$y=$(($x+$y))"
m='$x+$y=$(($x+$y))'
*关于shell中的变量
1.默认都是字符串
2.declare -i 整数类型
3.如果做整数运算,会把非整数都理解为0
4.declare +i 把变量的整数属性去掉
5.unset删除一个变量
6.echo $notexistvar 等价于 echo $emptystrvar(空字符串)
7.declare -r var (read-only)等价于 const int i = 1;
8.环境变量:指可以继承给儿子进程的变量
export x 或 declare -x x
注:shell中的继承只能通过环境变量
9.数组变量
a=(A B C 1 2 30)
echo ${a[0]}
数组长度:echo ${#a[@]}
增加元素:a[100]=40
总结
a.下标可以不连续
b.下标不合法输出空字符串
c.{#a[@]表示数组长度
10.特殊变量
$变量:当前shell的进程编号
?变量:返回上个命令的状态编号(上个命令执行成功返回0,未成功返回大于0)
11.把命令结果保存到变量中
a.$(cmd) 例:a=$(ls)
b.`cmd` 例:a=`date +%y-%m-%d`
test命令
a.判断文件类型、存在、时间比较、权限
b.比较字符串或证书
test -e /bin/ls:-e是否存在
与条件语句合用:
if test -e /bin/ls; then echo "exist: /bin/ls"; fi
if [ -e /bin/ls ]; then echo "exist: /bin/ls"; fi
shell中的循环
while循环
for循环
*上节课思考题:
for f in `find . -name '*output*txt'`
do
newf=`echo $f | sed 's/.output//'`;
mv $f $newf;
done
思考:
创建100个文件夹命名000-099,每一个文件夹内创建一个txt文件,命名为0.txt-99.txt,每个文件写入一个随机整数(rand命令),将所有的随机数排序(降序),输出格式(printf命令):
9734 : 7.txt
9324 :33.txt
安装:sudo apt-get install rand
unset一个变量名时,语法为unset x,注意不能有取值符,unset x[3],表示删除数组x的第3个元素