1. Shell脚本的参数
函数参数传递
> testfunc()
{
echo "$# parameters" # $# 参数个数
echo "$@" # $@参数内容
}
> testfunc a b c
3 parameters
a b c
shell脚本参数传递
> cat testfunc.sh
#! /bin/bash
echo "$# paramters"
echo "$@"
> ./testfunc.sh a "b c"
2 paramters
a b c
I/O重定向
echo的行为:读取echo参数中的变量,将所有的变量替换成值,变成字符串输出;在输出的末尾追加换行符,退出程序。
管道使程序不需要知道它的输入和输出背后是什么在支持着,是磁盘文件、是设备、终端、另一个程序。
- >改变标准输出
> echo "redirect to file" > /tmp/a.txt
> cat /tmp/a.txt
redirect to file
- <改变标准输入
> cat < /tmp/a.txt > /tmp/b.txt
- >>追加文件
for line in /etc/passwd #遍历/etc/passwd中的每一行
do
echo $line >> /tmp/b.txt
done
- 以|建立管道
head -n10 /etc/passwd | grep "prince" #将读取到的内容从输出端(管道)输出到grep命令的输入端,gerp读取内容后再其中检索包含文本"prince"的行
2. 文件描述符
内核利用文件描述符来访问文件。打开现存文件或新建文件时,内核会返回一个文件描述符(非负整数)。
3. Linux系统的设计与shell编程
Linux中一个文件是否能被执行和后缀没有太大的关系,主要和文件的属性有关。在Linux中带有扩展名的文件只能代表程序的关联,不能说明文件是可以执行的。
4. Linux文件类型
- 普通文件
> ls -lh install.log
-rw-r--r-- 1 root root 53K 03-16 08:54 install.log #第一个符号是-,表示此文件是Linux中的普通文件, rw-、r--、r--分别表示文件所有者的权限,同组用户的权限,7其他用户的权限
- 目录
> ls -lh
drwxr-xr-x 2 1000 users 4.0K 04-04 23:30 mydir #第一个符号d表示为目录文件
- 字符设备或块设备
> ls -la /dev/tty
crw-rw-rw- 1 root tty 5, 0 04-19 08:29 /dev/tty #第一个字符c表示这是个符号设备
brw-rw-rw- 1 root tty 5, 0 04-19 08:29 /dev/hdal #第一个字符b表示这是个块设备
第一个字符是s表示此文件为套接口文件,为l时表示此文件为符号链接文件