Linux-2020-spring-5-6

来自SUDA-HLT
Zhli讨论 | 贡献2020年5月7日 (四) 01:10的版本 →‎shell 脚本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

复习

遗留问题:同时做很多文件的覆盖: 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个元素