shell编程:一些shell命令的集和
1.shell脚本的作用、
1.shell命令
实现以下功能:
-
用户主目录下创建一个文件夹23041/day1 mkdir -p ~/23041/day1
-
进入用户目录下的23041/day1
cd ~/23041/day1
-
创建一个文件1.txt
touch 1.txt
2.shell脚本 后缀名为.sh.
2. shell语法
1. 和C语言比较
-
都属于计算机语言
-
C语言是编译性语言(编译器gcc),强类型语言,数据类型比较多
-
shell语言是解释性语言,弱类型语言
2. shell开发过程
-
创建一个后缀为.sh的文件
touch 1.sh
-
编辑.sh文件
-
修改文件权限
chmod -x 1.sh
-
运行文件
3. 变量
1. 用户自定义变量
1. 变量名的命名规范
-
由数字,字母和下划线组成,首字母不能为数字
-
不能为关键字或保留字
-
尽量见名知意,尽量大写
2. 变量名的语法规则
2.位置参数既命令行参数
3. 预定义变量
$# :包含命令行参数的个数
$@ :包含所有命令行参数
$* :包含所有命令行参数
$$:包含正在执行进程的ID号
$?:包含前一个命令的退出状态,正常退出是0(真),反之为非0值(假)
ps -ef 查看所有进程及其D(进程号),系统时间,命令详细目录,执行者等
ps aux 除了可显示-ef所有内容之外,还可显示CPU及内存占用率,进程状态
4. 环境变量
4. hell中的程序和语句
1. 说明性语句 注释
# shell中的注释
2. 功能性语句
1. 键盘读入变量值 read (标准输入)
2. 算术运算命令 expr
expr主要用于简单的整数运算
3. test命令:字符串、整数、文件属性
-
字符串
s1 = s2 测试两个字符串的内容是否完全一样
s1 !=s2 测试两个字符串的内容是否有差异
-z s1 测试字符串的长度是否为0
-n s1 测试s1字符串的长度是否不为0
-
整数
a -eq b 测试a与b是否相等 (equal)
a -ne b 测试a与b是否不相等
a -gt b 测试a是否大于b (great)
a -ge b 测试a是否大于等于b
a -lt b 试a是否小于b (little)
a -le b 测试a是否小于等于b
-
文件属性
7种文件:
普通文件 d 目录文件 l 链接文件 p 管道文件 s 套接字(socket)文件 c:字符设备文件 b:块设备文件
-d name 测试name是否为一个目录
-f name 测试name是否为普通文件
-L name 测试name是否为链接文件
-r name 测试name是否存在且可读
-w name 测试name是否存在且可写
-x name 测试name是否存在且为可执行
-s name 测试name文件是否存在且其长度不为0
f1 -nt f2 测试文件f1是否比文件f2更新
f1 -ot f2 测试文件s1是否比文件f2更旧
3. 结构性语句
1. 选择结构
1.单分支结构
if 表达式 then 命令表 fi
2. 双分支结构
if 表达式 then 命令表1 else 命令表2 fi
3.多分支结构
if 表达式1 then 命令表1 elif 表达式2 then 命令表2 elif 表达式3 then 命令表3 ·········· elif 表达式n then 命令表n else 命令表n+1 fi
case 字符串常量 in #测试字符串是否等于模式 模式1) 命令表1 ;; #类似于break 模式2) 命令表2 ;; 模式3) 命令表3 ;; ··············· 模式n) 命令表n ;; esca
2.循环结构
1. for循环
-
带列表的for循环
for 变量名 in 列表 do 命令表 done
-
不带列表foe循环
-
类似C语言的for语句
2. while 循环
while 命令或表达式 do 命令表 done
5.函数
函数的定义
方式一
function_name() { }
方式二
function function_nzme() { } function add() { SUM=`expr $1+$2` # $1是你传进来的第1个参数,$2是你传进来的第2个参数 return $SUM #返回结果 }
函数的调用
方式一
SUM=`functio_name 参数列表`(和函数名之间用空格隔开) echo $SUM #调用add函数的时候 SUM=`add 23 45` echo $SUM
方式二
SUM=`functio_name 参数列表`(和函数名之间用空格隔开) ADD 23 25 echo $? # $?表示上一个命令的退出状态
案例
案例一:
请输入一个文件,判断它是否是普通文件,如果是普通文件,判断它是否有写的权限,如果有写的权限,向文件中写入"hello world"如果文件没有写的权限,给它添加写权限后,写入"hello world"
案例二:
请输入想要下载的文件的名字,让用户确认下是否下载这个软件[Y/N/Q]。 Y(YES|Yes|yes|y|Y):正在下载软件,N:取消下载软件,Q退出
案例三:LinuxOS p169 8-23
案例四:
-
判断用户的主目录下是否有file-dir或者dir-dir目录如果这两个目录存在,询问用户是否删除这两个目录,如果用户输入的是Y,将这两个目录删除,重新创建这两个目录如果用户输入的是N,退出程序。如果上述的两个目录不存在,创建这两个目录。
-
请用户输入一个路径,将这个路径下的文件拷贝到file-dir将这个路径下的目录拷贝到dir-dir.
-
统计拷贝的文件和目录的个数