Shell笔记

来源:互联网 发布:打车软件 技术方案 编辑:程序博客网 时间:2024/06/05 07:47

1. #!, 内核会扫描该行的其余部分,看是否存在可用的执行程序的解释器的完整路径,中间如果出现任何的空白符号都会略过,此外,内核还会扫描是否有一个选项要传递给解释器。内核会以指定的选项来执行解释器,再搭配命令行的其他部分。

#! /bin/csh -f

#! /bin/sh

2. #!这行的限制可能是63~1024, 所以尽量不要超过64, 解释器尽量用完整路径

3. 分号(;)可用来分隔同一行的多条命令, 如果使用&而不是分号,则shell将在后台执行前面的命令,这意味这shell不用等到该命令的完成就可以继续执行下一条命令

4.shell识别的三种基本命令:内建命令,shell函数和外部命令

5. 变量的使用

myvar = "this is a srting"

echo $myvar

fulename = "$first $middle $last"

6. printf "Hello, workd\n"

7. 改变标准输入与输出

tr -d '\r' < dos-file.txt > Unix-file.txt

8. >>附加到文件

9. | 建立管道(pipeline)

program1 | program2可将program1的标准输出改为program2的标准输入

10. 构造管道时,应该让每个阶段的数据量变得更少,就是说如果有两个要完成的步骤与先后次序无关,可以包会让数据量变少的那个步骤放在前面.

11. 特殊文件: /dev/null和/dev/tty

/dev/null: 传送到此文件的数据都会被系统丢掉

/dev/tty: unix会自动把文件重定向到一个终端,这在读取人工输入是特别有效

例如:

printf "Enter new password:"

stty -echo                                                关闭自动打印输入字符功能

read pass < /dev/tty

printf "Enter again: "

read pass2 < /dev/tty

stty echo                                                  打开自动打印输入字符功能

...

12. 访问shell脚本的参数, 基于历史原因,当表示参数的整数大于9的时候,就应该用大括号把数字框起来。

echo tenth arg is ${10}

13. finduser例子

14. 简单的执行跟踪: 这会是shell显示每个被执行的命令,并在前面加"+"

#! /bin/sh

set -x
echo 1st echo

set +x
echo 2nd echo

15. 查找与替换


16. sort latin-numbers | uniq -c 计数唯一的,排序后的记录

17. echo Testing one two three | wc -c 计算字节数

echo Testing one two three | wc -l 计算行数

echo Testing one two three | wc -w 计算字数

18. wc /ect/passwd /etc/group 计算两个文件的数据
19. 打印

20. readonly可以把变量改为制度模式

hours_per_day=24

readonly hours_per_day

21. export将变量添加到环境中, env初始话变量, unset删除变量

22. 替换运算符 ${varname:=word}, ${varname:?message}, ${varname:+word}

23. 模式匹配 ${variable#pattern}

24. 位置参数

filename=${1:-/dev/tty}   如果给定参数则使用它,如果无参数就使用/dev/tty

25. 退出状态

26. test命令

if test "$str1"="$str2" 和 if [ "$str1"="$str2"] 作用相同

27. 函数

wait_for_user(){

until who | grep "$1" > /dev/null

do

    sleep ${2:-30}

done

}

调用: wait_for_user tolstoy 60

带返回值的函数

equal() {

    case "$1" in

    "$2") return 0;;

    esac

    return 1

}

28. read读入数据

while read ... do ... done < file

cat /etc/passwd |

while IFS=: read user pass uid gid fullname homedir shell

do

    ...

done

29. 命令行处理步骤

30.

原创粉丝点击