1、查看当前系统谁在登录:who

2、数出当前系统的登录用户:who | wc -l(l-->line,w-->word,c-->character)

3、小型shell脚本开发周期:$cat > nusere      新建文件,使用cat复制终端的输入

                          who | wc -l        输入程序内容

                          ^ D                Ctrl+D表示end-of-file

                          $chmod +x nusere   给此文件添加执行的权限

                          $./nusere          执行脚本,输出结果,或者/bin/sh nusere

4、#!:填写脚本执行路径,shell脚本通常第一行缩写内容为 #! /bin/sh

5、命令与参数

    (1)cd /work ; ls -l abc

    (2)命令名称是命令行的第一个项目,通常后面会跟着选项(option),任意额外的参数都会放在选项

       之后

    (3)选项的开头是破折号,后面跟着一个字母,选项可有可无,有的可能需要加上,有的则可以合并

       ls -l nusere,ls -lt nusere

    (4)长选项使用

        cd abc.c

        patch --verbose --backup -p1 < /temp/abc.c    (I/O重定向,该指令从文件中读取数据,

                                                        而不是从键盘输入)

    (5)分号(;)用来分隔同一行里面的多条命令;&符号标志shell将在后台执行其前面的命令,这意味

       着shell不用等该命令执行完,就可以执行下一条命令

    (6)shell识别的三种基本命令:内建命令、shell函数、以及外部命令

        内建命令:就是shell本身所执行的命令

        shell函数:shell函数是功能健全的一系列程序代码,以shell语言写成,可以像命令那样引用

        外部命令:外部命令是由shell的副本所执行的命令

            a:建立一个新的进程,此进程即为shell的一个副本

            b:在新的进程里,在PATH变量所列出的目录中,寻找特定的命令

            c:在新的进程里,以所找到的新程序取代执行中的shell程序并执行

            d:程序完成后,最初的shell会从终端读取下一条命令,或者执行脚本里的下一条命令

shell脚本入门_第1张图片    (7)变量:就是为某个信息的片段所起的名字

        a:格式是字幕或者下划线开头,后面可接任意长度的字母、下划线、数字

        b:变量名称长度不限制,变量赋值长度不限制

        c:书写过程中不能出现空格

        d:单行可进行多次赋值:firstname=sda lastname=rew name=fjdskfjdksa

           变量值包含空格时可以使用引号:fullname="fdsa hgf kjh"

           变量二次引用不用双引号:oldname=$fullname

    (8)简单的echo输出

    (9)华丽的printf输出

        printf "the first programalwaysprints '%s,%s'" HELLO WORLD

        -->the first programalwaysprints 'HELLO,WORLD'

    (10)基本的I/O重定向:标准输入、标准输出、标准错误输出

        I/O重定向就是你通过与终端交互,或是在shell脚本里设置。重新安排从哪里输入或者输出到

        哪里

    (11)重定向与管道

        a:以>改变标准输入    program < file 将输入改为file

        b:以>改变标准输出    program > file 将输出改为file

            >:重定向符在目标文件不存在时新加文件,如果目标文件已存在,则会覆盖,原本文件数

               据丢失

        c:以>>附加到文件    program >> file 将标准输出内容附加到file的结尾处

        d:管道"|",program1 | program2 将program1的标准输出作为program2的标准输入

            可把两个以上的程序衔接在一起,也大大的提高了执行的速度

            eg:tr -d '\r' < dos-file.txt | sort > UNIX-file.txt 先删除文件中的回车,在排

                                                                 序,最后输出到文件中

    (12)特殊文件/dev/null与/dev/tty

        /dev/null:位桶(bit bucket),传到此文件的数据都会被系统丢掉,也就是说当程序将数据写

                   到此文件时,会认为他已经成功完成写入数据的操作,但实际上什么事都没做,如

                   果你需要的数据是退出状态,而非他的输出,会很有用,相对的,读取/dec/null

                   则会立即返回文件的结束符(end-of-file)

        /dev/tty:当程序打开此文件时,unix会自动将他重定向到一个终端【一个实体的控制台或串

                  行端口,也可能是一个通过网络与窗口登录的伪终端】再与程序结合,这在程序必

                  须读取人工输入时(密码),特别有用,此外用来产生错误信息也很有用,但是很少

                  有人这么用:

                  printf "Enter new passwd: "    提示输入

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

                  read pass1 < /dev/tty          读取密码

                  printf "Enter again: "         提示用户再次输入

                  read pass2 < /dev/tty          再读取一次以确认

                  stty echo                      别忘了打来自动打印输入字符的功能

                  解释:stty用来控制终端的各种设置

    (13)基本命令查找

        查看环境变量:echo $PATH

        新建/HOME/bin目录:cd                           进入home目录

                           mkdir bin                    新建bin目录

                           mv nusere bin                将文件nusere移动到bin目录

                           PATH=$PATH:$HOME/bin         添加环境变量

                           nusere                       直接写文件名称可执行文件

        .profile文件:环境变量永久生效,将PATH=$PATH:$HOME/bin写入此文件

                      书写规则:空项目位于目录中间时,可用::表示。如果冒号直接置于最前或者

                                最尾端

    (14)访问shell脚本的参数

        位置参数:就是shell脚本的命令行参数,在shell函数里,他同时也可以是函数的参数,各参

                  数都是由整数来命名的,当他超过9,就应该用大括号括起来

                  echo first arg is $1

                  echo tenth arg is $(10)

                      eg:cat > finduser

                          who | grep $1

                          who | grep $2

                          ^D

                          执行:./finduser a b

    (15)简单的执行跟踪:知道程序正在做什么

        直接跟踪:sh -x nusere

        在文件里面执行跟踪陪:

        shell脚本入门_第2张图片