学习就要趁热打铁.
输入输出
Linux下有标准的输出输出,为stdin
,stdout
,stderr
.其中stdin
是从键盘获取输入,文件描述符为0;stdout
则是将内容输出到屏幕,文件描述符为1;而stderr
则类似stdout
,也是输出到屏幕,但文件描述符为2.
三者都可以重定向.
shell中可以使用echo
,printf
将内容输出.
echo
语法:
echo "content."
printf
语法:
printf format-string [arguments…]
其中format-string可以使用%s %c %d %f
等格式替代符,并支持指定宽度与小数位数.
即:
#!/bin/bash
printf "%-10s %-8s %-6s\n" Name Sex Weight
printf "%-10s %-8s %-6.2f\n" Allen male 60.2222
printf "%-10s %-8s %-6.2f\n" Jon male 54.503
printf "%-10s %-8s %-6.2f\n" Angel female 48.0539
让我们来重定向吧.
#!/bin/bash
# 将输出重定向到out文件.这时,out文件如果不存在则会创建赋值,如果out文件存在,则其中内容都将被覆盖.
echo "this is content." > out
# 将输出重定向到out文件.不同的是,如果out文件存在则内容将会追加到文件尾行,若不存在,则创建并赋值.
echo "this is new content." >> out
管道
管道通过符号 |
实现.其是将本条的输出内容作为参数传给其后的命令.
举个栗子.
假设有文件out
,其内容如下:
file1,file2
txt,png
2012-06
june,july
summer,autumn
若哥想只看包含2012
这个词行,则可以使用如下命令:
cat ./out | grep '2012'
if 判断
if
是条件判断语句.其基本语法如下:
if [ condition ];then
command
elif [[ condition ]];then
command
else
command
fi
其中[]
是一条命令,而[[ ]]
则是关键字,后者要比前者强大,当然了,大部分情况下都能互用.
2. 文件/文件夹(目录)判断
[ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真
[ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真
[ -d DIR ] 如果 FILE 存在且是一个目录则为真
[ -e FILE ] 如果 FILE 存在则为真
[ -f FILE ] 如果 FILE 存在且是一个普通文件则为真
[ -g FILE ] 如果 FILE 存在且已经设置了SGID则为真
[ -k FILE ] 如果 FILE 存在且已经设置了粘制位则为真
[ -p FILE ] 如果 FILE 存在且是一个名字管道(F如果O)则为真
[ -r FILE ] 如果 FILE 存在且是可读的则为真
[ -s FILE ] 如果 FILE 存在且大小不为0则为真
[ -t FD ] 如果文件描述符 FD 打开且指向一个终端则为真
[ -u FILE ] 如果 FILE 存在且设置了SUID (set user ID)则为真
[ -w FILE ] 如果 FILE存在且是可写的则为真
[ -x FILE ] 如果 FILE 存在且是可执行的则为真
[ -O FILE ] 如果 FILE 存在且属有效用户ID则为真
[ -G FILE ] 如果 FILE 存在且属有效用户组则为真
[ -L FILE ] 如果 FILE 存在且是一个符号连接则为真
[ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it was last read则为真
[ -S FILE ] 如果 FILE 存在且是一个套接字则为真
[ FILE1 -nt FILE2 ] 如果 FILE1 has been changed more recently than FILE2, or 如果 FILE1 exists and FILE2 does not则为真
[ FILE1 -ot FILE2 ] 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在则为真
[ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的设备和节点号则为真
- 字符串判断
[ -z STRING ] 如果STRING的长度为零则为真 ,即判断是否为空,空即是真
[ -n STRING ] 如果STRING的长度非零则为真 ,即判断是否为非空,非空即是真
[ STRING1 = STRING2 ] 如果两个字符串相同则为真
[ STRING1 == STRING2 ] 如果两个字符串相同则为真
[ STRING1 != STRING2 ] 如果字符串不相同则为真
[ STRING1 ] 如果字符串不为空则为真,与-n类似 -
数值判断
[ INT1 -eq INT2 ] INT1和INT2两数相等为真 ,=
[ INT1 -ne INT2 ] INT1和INT2两数不等为真 ,<>
[ INT1 -gt INT2 ] INT1大于INT1为真 ,>
[ INT1 -ge INT2 ] INT1大于等于INT2为真,>=
[ INT1 -lt INT2 ] INT1小于INT2为真 ,<
[ INT1 -le INT2 ] INT1小于等于INT2为真,<= -
复杂逻辑判断
-a 与
-o 或
! 非