操作系统 Linux ex2 note

locate filename 搜索文件

将当前用户目录下的文件清单输出到文件list1.txt(当前用户目录下)中、
ls -l > list1.txt

利用管道命令将根(/)下所有修改日期在4月24日的文件清单输出到list2.txt(当前用户目录下)。
ls / -l
ls / -l | grep '4月 24' > list2.txt

将文件list1.txt与文件list2.txt合并,输出到list.txt。
cat list1.txt list2.txt > list.txt

利用nano编写Linux脚本程序sum.sh,其功能如下:
请求用户输入正整型数n
判断n的值,若n小于或等于0,则输出错误信息
<当前时间> Input Error! n = <输入的n的值>
追加到error.log,并以5号错误代码退出脚本。
若输入有效,则计算从1到n的所有整数的和,输出到sum.r。


执行方式
(1) bash script-name或者sh script-name
(2) path/script-name或者./script-name

注意:
(1)在Shell中如果一行的第一个字母是#,则是注释,但是上面两个是写在第一行,所以不是脚本注释行,如果写在某个命令之后,则变成注释行。
(2)sh为bash的软链接,大多数情况下,脚本的开头使用“#!/bin/bash”和“#!/bin/sh”是没有区别的,但更规范的写法是在脚本的开头使用“#!/bin/bash”。

#!/bin/bash 注释
read -p "input" n 输入
echo "n is $n" >> ./out.txt 输出到文件
echo "n is $n" 输出到控制台

------------------------------------------------------------------------------
两条命令一起运行,输在同一行,用;隔开。最大不超过255字符
date显示时间
who显示当前登录到该系统的用户

脚本第一行#!/bin/bash/
除第一行第一个字符外,可以用#表示注释

运行
./test1
没有权限
创建文件时,umask值为默认权限设置 022,系统以只读和只写权限创建该文件
用chmod u+x test1修改权限
chmod 777 a
./a
此法 shell储存文件a没有后缀名

显示消息
echo ok 在字符串不含引号时可不用引号
echo 'ok'
echo "ok" 可用双引号、单引号
用上面的会自动换行,若不换行,加参数-n
echo -n "ok"
需要用引号包围字符串,同时确保该字符串末尾有个空格(好像不用?)

使用变量

环境变量
$USER
$UID
$HOME
只能大写

用户变量
不超过20字符,区分大小写
变量、等号、变量值之间不允许有空格
通过$引用
被赋值不用$,赋值需要
a=$b

反引号
允许将整个命令的输出赋值给变量
testing=`date`
用反引号捕获当前日期,并用它在脚本中创建唯一的文件名
#!/bin/bash
today=`data +%y%m%d` #加号左边必须有空格,右边没有。用反引号
ls /bin -al > log.%today

输出重定向
date > test.txt 若文件存在,覆盖
date >> test.txt 附加

输入重定向
command < inputfile
wc命令
wc < test6
默认生成3个值
文本行数
文本单词数
’文本字节数

sort命令

数学计算
aa=4
bb=`expr $aa + $aa0` #反引号
echo "$bb"

使用括号
var1=$[1 + 5]

bash shell只支持整数算法
关于浮点小数 P142、143

退出脚本
退出状态0~~255,成功0
退出状态表P145
默认以shell脚本最后一条命令的退出状态退出
可以改为自己的退出状态代码
exit 5
exit $var3

if - then 语句
if 语句命令返回的退出状态为0,就会执行then后面的语句;非0,跳过。

if command
then
commends
fi

if date
then
echo "it worked"
fi

if command; then #在command末尾加分号
commands
fi

if-then-else语句
if command
then
commands
else
commands
fi

elif
if command
then
commands
elif command
then
commands
fi

test命令
if test condition
then
commands
fi

if [ condition ]
then
conditions
fi
方括号前后要加空格

数值比较
n1 -eq n1 ==
-ge >=
-gt >
-le <=
-lt <
-ne !=
要注意的是 [ ] 中引用变量需要 $

字符串比较
str1 = str2
str1 != str2
str1 < str2
str1 > str2
-n str1 检查str1的长度是否大于0
-z str1 检查str1的长度是否为0

if [ $USER = $testuser ]
if [ $val1 > $val2 ]
if [ $val1 \> $val2 ]
if [ -n $val ]
if [ -z $val ]

文件比较 P155
-d -e -f ................

复合条件检查
[ condition_1 ] && [ condition_2 ]
[ condition_1 ] || [ condition_2 ]

if then高级特征
双圆括号 P162
(( expression ))
(( val2=$val1 ** 2 )) #取幂

双方括号 P162
[[ expression ]] 提供模式匹配
正则表达式......

case p163


1. 利用nano编写Linux脚本程序sum.sh,其功能如下:
请求用户输入正整型数n
判断n的值,若n小于或等于0,则输出错误信息
<当前时间> Input Error! n = <输入的n的值>
追加到error.log,并以5号错误代码退出脚本。
若输入有效,则计算从1到n的所有整数的和,输出到sum.r。

#!/bin/bash

touch error.log
touch sum.r

read -p "请输入正整数:" n
if [ "$n" -le 0 ]
then
echo "$(date) Input Error! n=$n" >> error.log
exit 5
else
sum=0
while [ "$n" -gt 0 ]
do
sum=$[ $sum + $n ]
n=$[ $n - 1 ]
done
echo "从1到n的和为:$sum" >> sum.r
fi


用 bash sum.sh运行
用 echo $?可以获得exit返回的值

 

posted @ 2018-05-11 21:19  cbattle  阅读(256)  评论(0编辑  收藏  举报