Shell脚本初步认识与编写
综述篇---怎样写Shell
第一行:#!/bin/sh 它通知系统以下的Shell程序使用系统上的Bourne Shell来解释
第二行:# 注释中写入脚本名
第三行:# 注释中写入脚本功能
cygwin简介---在Windows下开发linux程序
软件下载:cygwin的官方网站:
推荐下载:/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)
useradd UserName新建用户后,会在/home目录下建立一个以UserName 命名的文件夹,用户每次登录时自动定位到该文件夹下。
为用户添加密码(passw or d)
passwd UserName
删除用户(user del ete)
userdel UserName 使用-p选项可以删除用户目录下的文件及与用户相关联的其他文件
新建组群(group add)
groupadd GroupName
删除组群(group del ete)
groupdel GroupName
用户身份
whoami
查看登录用户
who [选项]
-a显示所有用户的所有信息
-H 显示列标题
查看用户的操作
w 某一时刻用户的行为
用户间切换(s ubstitute u ser)
su UserName
目录管理
创建目录(m a k e dir ectory)
mkdir DirecName
删除目录(r e m ove dir ectory)
rmdir DirecName
显示工作目录(p rint w orking d irectory)
pwd
显示目录内容
ls -a显示当前目录下的所有文件,包括以. 开头的文件-l 以长列表的形式显示文件列表
改变当前目录(c hange d irectory)
cd或cd ~进入登录时的主目录
cd / 进入根目录
cd .. 进入上一级目录
cd /home进入系统的home目录
cd home 进入当前目录下的home目录
目录重命名(m o v e)
mv SourceDirecName T argetDirecName
目录拷贝(c o p y)
cp SourceDirec T argetDirec
-r 拷贝目录下的文件、子目录及子目录下的文件
文件管理
新建文件
>FileName或touch FileName 或vi FileName
删除文件(r e m ove file)
rm [选项] FileName
-i 系统提示是否真要删除该文件
-f 删除文件之前不提示任何确认信息
-r 递归删除目录下所有子目录的内容
文件拷贝(c o p y)
cp SourceFile T argetFile
文件链接(l i n k)
ln -s SourceFile T argetFile
创建文件链接,用ls -l查看,会看到T argetFile->SourceFile
显示文件内容
more FileName
less FileName
cat FileName
cat file1 file2>file3 将file1、file2的内容写到file3,覆盖file3原内容cat file1>>file2 将file1的内容追加到file2,file2原内容不变head -n FileName只显示文件的前n行,没有-n默认是10行
tail -n FileName 只显示文件的后n行,没有-n默认是10行
nl FileName 以编号的形式一次全部显示文件的内容,忽略空格
文件移动/重命名(m o v e)
mv SourceFile T argetFile将一个或多个文件移动到另一个目录下,或者将一个文件重命名为另一个文件
文件查找(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)
权限管理
文件访问权限
一个文件已经创建,就具有三种访问方式
改变文件/目录的权限(ch ange mod e)
chmod [u/g/o/a] [+/-/=] [权限] FileName/DirecName
chmod *** FileName/DirecName
改变文件/目录的属主(ch ange own er)
chown Owner FileName/DirecName
改变文件/目录的属组(ch ange gr ou p)
chgrp Group FileName/DirecName
改变文件/目录的属主和属组
chown owner:group FileName/DirecName
变量
∙变量可以定制用户本身的工作环境,使用变量可以保存有用信息,使系统获知用户相关设置,也用于保存暂时信息。
∙变量一般都用大写字母表示
∙使用echo命令可以显示单个变量的取值,要在变量名前面加$
如:USER="haison"
echo $USER
∙如果设置变量时,不想再改变其值,可以将其设置为只读,只要在变量名前加readonly
∙使用set命令可以显示所有本地定义的shell变量
∙使用unset 变量名可以清除对变量的定义
本地变量:用户定义的变量
环境变量:用于所有用户变量,用于用户进程前,必须用export命令导出
位置变量:$0(脚本名),$1-$9:脚本参数
特定变量:脚本运行时的一些相关信息
示例:假如名字为zz.sh
#!/bin/sh
#VarT est.sh
#T o 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开头。