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会从终端读取下一条命令,或者执行脚本里的下一条命令
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
在文件里面执行跟踪陪: