shell编程基础

shell编程基础

shell脚本的用途

自动化常用命令
执行系统管理和故障排除
创建简单的应用程序
处理文本或文件

创建shell脚本过程

第一步:使用文本编辑器来创建文本文件
第一行必须包括shell声明序列:#!

#!/bin/bash

第二步:加执行权限
给予执行权限,在命令行上指定脚本的绝对或相对路径
第三步:运行脚本
直接运行解释器,将脚本作为解释器程序的参数运行

脚本注释规范

1、第一行一般为调用使用的语言
2、程序名,避免更改文件名为无法找到正确的文件
3、版本号
4、更改后的时间
5、作者相关信息
6、该程序的作用,及注意事项
7、最后是各版本的更新简要说明

第一个脚本

备份etc下的文件到data下并以etcYY-mm-hh命名

echo -e "\033[1;32mStarting backup...\033[0m"
sleep 2
cp -av /etc/ /data/etc`date +%F`
echo -e "\033[1;32mBackup is finished...\033[0m"

脚本调试

bash -n script
注意:只能检查语法错误
调试执行
bash -x script

Shell中变量命名法则

1,不能使程序中的保留字:如:if, for
2,只能使用数字、字母及下划线,且不能以数字开头
3,见名知义,用英文名字,并体现出实际作用
4,统一命名规则:驼峰命名法, studentname,大驼峰StudentName 小驼峰studentName
5,变量名大写
6,局部变量小写
7,函数名小写

变量的生效范围

普通变量:只在当前shell生效对于父shell和子shell均不生效
环境变量:在当前shell和子shell中生效,对于父shell不生效

变量赋值

[root@centos7|13|data]#name=root        \\变量赋值
[root@centos7|14|data]#echo $name              
root
[root@centos7|15|data]#usr=$name        \\变量引用
[root@centos7|16|data]#echo $name
root
[root@centos7|20|data]#ti=`date`         \\命令引用 格式一
[root@centos7|21|data]#echo $ti
2019年 12月 25日 星期三 08:44:50 CST
[root@centos7|22|data]#Ti=$(date)         \\命令引用格式二
[root@centos7|23|data]#echo $Ti
2019年 12月 25日 星期三 08:45:15 CST

强引用于弱引用

[root@centos7|24|data]#name=date
[root@centos7|25|data]#echo "$name"     \\弱引用 其中变量引用会被替换为变量值
date
[root@centos7|26|data]#echo '$name'     \\强引用 其中变量引用不会替换为变量值,而是保持原字符串
$name
[root@centos7|27|data]#echo `$name`     \\变量中的命令会被引用
2019年 12月 25日 星期三 08:49:34 CST

显示已定义的变量
set
删除变量
unset name

环境变量

声明:export name=VALUE
declare -x name=VALUE
变量引用
$name
${name}
显示环境变量
env
声明只读变量
readonly name
查看只读变量
readonly

位置变量

位置变量:在bash shell中内置的变量, 在脚本代码中调用通过命令行传递给脚本的参数
$1, $2, ... 对应第1个、第2个等参数,shift [n]换位置  
$0 命令本身,包括路径  
$* 传递给脚本的所有参数,全部参数合为一个字符串 
$@ 传递给脚本的所有参数,每个参数为独立字符串  
$# 传递给脚本的参数的个数     
注意:$@ $* 只在被双引号包起来的时候才会有差异 

例:

 [root@centos7|712|script]#cat set.sh
#!/bin/bash
  echo $1
echo $2
echo $3
echo $4
echo $5
echo $6
echo $7
echo $8
echo $9
echo $0
echo $*
echo $@
echo $#
[root@centos7|713|script]#bash set.sh 1 2 3 4 5 6 7 8 9
1
2
3
4
5
6
7
8
9
set.sh
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
9

清空所有位置变量
set –
命令执行后
输入echo $?若返回0则成功若返回非0则失败
用户可以在脚本中使用以下命令自定义退出状态码 exit 数字
注意:
脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命令后面的数字
如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码
反斜线(\)会使随后的字符按原意解释

[root@centos7|716|script]#echo "\$5"
$5

set命令实现脚本安全

可在脚本中加入set -ue
-u在扩展一个没有设置的变量时,显示错误信息
-e如果一个命令返回一个非0退出状态值(失败)就退出

算数运算

[root@centos7|717|script]#i=10
[root@centos7|718|script]#j=20
[root@centos7|719|script]#let var=i*j
[root@centos7|720|script]#echo $var
200

(1) let var=算术表达式
(2) var= [ 算 术 表 达 式 ] ( 3 ) v a r = [算术表达式] (3) var= [](3)var=((算术表达式))
生成一个随机数

[root@centos7|721|script]#echo $[$RANDOM%7]
3
[root@centos7|722|script]#echo $[$RANDOM%7]
4
[root@centos7|723|script]#echo $[$RANDOM%7]
3
[root@centos7|724|script]#echo $[$RANDOM%7]
0

变量测试

[ -v var ]
echo $?
0为设置
非0未设置

数值测试

-gt 是否大于
-ge 是否大于等于
-eq 是否等于
-ne 是否不等于
-lt 是否小于
-le 是否小于等于
字符串测试
[ -z var ] 空为真,非空为假
[ -n var ] 空为假,非空为真
!=
=
[[ = ]]
[[ =~ ]]用于正则表达式
2.10.4 文件测试
-a FILE:同 -e
-e FILE: 文件存在性测试,存在为真,否则为假
-b FILE:是否存在且为块设备文件
-c FILE:是否存在且为字符设备文件
-d FILE:是否存在且为目录文件
-f FILE:是否存在且为普通文件
-h FILE 或 -L FILE:存在且为符号链接文件
-p FILE:是否存在且为命名管道文件
-S FILE:是否存在且为套接字文件

文件权限测试

-r FILE:是否存在且可读
-w FILE: 是否存在且可写
-x FILE: 是否存在且可执行
-u FILE:是否存在且拥有suid权限
-g FILE:是否存在且拥有sgid权限
-k FILE:是否存在且拥有sticky权限

流程控制

if语句

格式
if [ 条件 ];then 命令 ;
elif [ 条件 ];then 命令; 可选项
else 命令;
fi

case语句

case 变量引用 in
1|2|3)
命令一
;;
4|5|6)
命令二
;;
*)
命令三
;;
esca

脚本示例

通过位置变量创建 Linux 系统账户及密码




 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值