Shell脚本初步认识与编写
综述篇---怎样写Shell
第一行:#!/bin/sh 它通知系统以下的Shell程序使用系统上的Bourne Shell来解释
第二行:# 注释中写入脚本名
第三行:# 注释中写入脚本功能
cygwin简介---在Windows下开发linux程序
软件下载:cygwin的官方网站:www.cygwin.com
推荐下载:http://www.macraigor.com/full_gun.htm
软件安装:在安装的过程中可选择默认安装路径:c:\cygwin 。安装完成后要修改cygwin目录下的cygwin.bat文件,在@echo off后面加上set CYGWIN=title ntea,这是因为Cygwin的启动批处理文件需要启动Unix文件系统模拟。
Linux黑洞---/dev/null
是一个虚设的设备,俗称“Linux黑洞”,任何对/dev/null 的写入都会成功,但数据会消失的无影无踪,没有任何反馈。所以经常把不想在屏幕显示的信息全部送到/dev/null中,在Shell脚本中用的比较多
如:ls -l> /dev/null
还可以用开清空文件的内容:
cat /dev/null> FileName
命令篇
用户管理
新建用户(user add)
useraddUserName 新建用户后,会在/home目录下建立一个以UserName命名的文件夹,用户每次登录时自动定位到该文件夹下。
为用户添加密码(password)
passwdUserName
删除用户(user delete)
userdelUserName 使用-p选项可以删除用户目录下的文件及与用户相关联的其他文件
新建组群(group add)
groupaddGroupName
删除组群(group delete)
groupdelGroupName
用户身份
whoami
查看登录用户
who [选项]
-a 显示所有用户的所有信息
-H 显示列标题
查看用户的操作
w 某一时刻用户的行为
用户间切换(substituteuser)
suUserName
目录管理
创建目录(make directory)
mkdirDirecName
删除目录(remove directory)
rmdirDirecName
显示工作目录(print working directory)
pwd
显示目录内容
ls -a 显示当前目录下的所有文件,包括以. 开头的文件
-l 以长列表的形式显示文件列表
改变当前目录(change directory)
cd 或 cd ~ 进入登录时的主目录
cd/ 进入根目录
cd.. 进入上一级目录
cd/home 进入系统的home目录
cdhome 进入当前目录下的home目录
目录重命名(move)
mvSourceDirecName TargetDirecName
目录拷贝(copy)
cpSourceDirec TargetDirec
-r 拷贝目录下的文件、子目录及子目录下的文件
文件管理
新建文件
>FileName 或 touch FileName 或 viFileName
删除文件(removefile)
rm [选项]FileName
-i 系统提示是否真要删除该文件
-f 删除文件之前不提示任何确认信息
-r 递归删除目录下所有子目录的内容
文件拷贝(copy)
cp SourceFileTargetFile
文件链接(link)
ln-s SourceFile TargetFile
创建文件链接,用ls -l查看,会看到TargetFile->SourceFile
显示文件内容
moreFileName
lessFileName
catFileName
cat file1 file2>file3 将file1、file2的内容写到file3,覆盖file3原内容
catfile1>>file2 将file1的内容追加到file2,file2原内容不变
head-n FileName 只显示文件的前n行,没有-n默认是10行
tail-n FileName 只显示文件的后n行,没有-n默认是10行
nlFileName 以编号的形式一次全部显示文件的内容,忽略空格
文件移动/重命名(move)
mv SourceFile TargetFile 将一个或多个文件移动到另一个目录下,或者将一个文件重命名为另一个文件
文件查找(find)
find[选项] [选项]
find/ -name "Linux" -print
文件内容查找(grep)
grep"main" haison.c
文件类型
ll 如 -rw-r--r--
前缀是文件类型:
- :普通文件
b :块(block)设备文件
c :字符(character)设备文件
d :目录(directory)
l :链接(link)文件
p :命令管道(pipe)文件
s :本地套接口(socket)
权限管理
文件访问权限
一个文件已经创建,就具有三种访问方式
改变文件/目录的权限(change mode)
chmod[u/g/o/a] [+/-/=] [权限] FileName/DirecName
chmod*** FileName/DirecName
改变文件/目录的属主(changeowner)
chownOwner FileName/DirecName
改变文件/目录的属组(change group)
chgrpGroup FileName/DirecName
改变文件/目录的属主和属组
chownowner:group FileName/DirecName
变量
-
变量可以定制用户本身的工作环境,使用变量可以保存有用信息,使系统获知用户相关设置,也用于保存暂时信息。
-
变量一般都用大写字母表示
-
使用echo命令可以显示单个变量的取值,要在变量名前面加$
如:USER="haison"
echo $USER
-
如果设置变量时,不想再改变其值,可以将其设置为只读,只要在变量名前加readonly
-
使用set命令可以显示所有本地定义的shell变量
-
使用unset 变量名 可以清除对变量的定义
本地变量:用户定义的变量
环境变量:用于所有用户变量,用于用户进程前,必须用export命令导出
位置变量:$0(脚本名),$1-$9:脚本参数
特定变量:脚本运行时的一些相关信息
示例:假如名字为zz.sh
#!/bin/sh
#VarTest.sh
#To test the variables
USER=haison
echo "hello,$USER,look:"
echo "The name is:'basename$0'"
echo "The fist param is :$1"
echo "The second param is :$2"
echo "All the params are :$*"
echo "The number are:$#"
echo "The process ID is :$$"
echo "The exti status is:$?"
执行的时候输入:zz.sh zhang wang
函数
格式
函数名()
{
命令
}
所有函数在使用前必须定义,这意味着必须将函数放在脚本开始的地方,直至shell解释器首次发现它,才可以使用。
调用函数仅使用其函数名即可,要传给函数的变量跟在函数后面。
函数里定义的变量以下划线(_)开始
函数可以放在同一个文件中作为一段代码,也可以放在只包含函数的单独文件中,文件也必须以#!/bin/sh开头