shell的 脚本

shell脚本

变量名称注意事项

  • 只能包含字母,数字.下划线,并且不能以数字开头
  • 不应该跟系统中已有的变量重名,尽量不要全部使用大写,尽量不要用’_'下划线开头
  • 不能使用程序中保留字,例如if、for等
1.查看当前系统支持的shell
[root@localhost ~]# cat /etc/shells 
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
2.查看当前系统默认使用的shell
[root@localhost ~]# echo $SHELL
/bin/bash
脚本测试
[root@localhost ~]# bash -n  hh.sh  //’检查是否有语法错误
[root@localhost ~]#  


[root@localhost ~]# bash -x  hh.sh   // 单步执行脚本错在那
+ (( i=0  ))
+ (( i<=1  ))
+ echo 0
0
+ (( i++ ))
+ (( i<=1  ))
+ echo 1
1
+ (( i++ ))
+ (( i<=1  ))
写脚本注意事项
  • 禁止将未成功执行的代码直接写进脚本
  • 脚本中的命令一定要有用绝对路径
算术公式

变量的操作

设置变量
引用变量
撤销变量

[root@localhost ~]# A=19999
[root@localhost ~]# echo $A
19999
[root@localhost ~]# unset A
[root@localhost ~]# echo $A

[root@localhost ~]# 

单引号和双引号与变量的关系

双引号,弱引用,可以实现变量替换

[root@ansible ~]# num1=10
[root@ansible ~]# echo "$num1"

单引号,强引用,不完成变量替换

[root@ansible ~]# echo '$num1'
$num1

bash变量的类型

  • 环境变量
  • 本地变量
  • 位置变量
  • 系统变量
[root@localhost ~]# age=20
[root@localhost ~]# echo $age 
20
[root@localhost ~]# export age=20
[root@localhost ~]# echo $age 
20
[root@localhost ~]# bash
[root@localhost ~]# echo $age 
20
[root@localhost ~]# bash


[root@localhost ~]# cat dmm.sh 
#! /bin/bash
echo $#
[root@localhost ~]# 
[root@localhost ~]# ./dmm.sh 1 2 3 5 4 5 61 5
8
特殊变量
* $#: 位置参数的数量 位置变量不同,参数可超过9个
* $*  所有位置参数的内容
* $? 命令执行后返回的状态,0表示没有错误,非0表示有错误
* $! 后台运行的最后的一个Process进程号
* $0 当前执行的进程名
* $@ 是传给脚本的所有参数的列表
* $$  是脚本运行的当前程ID号


bash内创建环境变量
PATH 
SHELL
UID
HISTSIZE
HOME
PWD
HISTFILE
PS1

PATH #系统中所有命令查找的位置

[root@localhost ~]# echo $PATH 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

SHELL #这个变量中存放着当前使用的shell

[root@localhost ~]# echo $SHELL
/bin/bash

#当前用户的UID

[root@localhost ~]# echo $UID 
0

HOME #当前用户的家目录

[root@localhost ~]# echo $HOME 
/root

PWD #当前所在的目录路径

[root@localhost ~]# echo $PWD 
/root

HISTFILE #命令历史存放的文件

[root@localhost ~]# echo $HISTFILE
/root/.bash_history

PS1 #定义命令提示符

[root@localhost ~]# echo $PS1
[\u@\h \W]\$

、Shell命令替换: 理解为将指令的执行结果赋值给变量

#方式一:使用反应号将指令包围
var_name1 = `date`

#方式二:使用$()将指令包围
var_name2 = $(date)

echo $var_name1
echo $var_name2

只读变量
readonly VAR_NAME=VALUE     //不能修改值,不能销毁,只能等shell进程终止时随之消亡

整数测试

-eg  //测试两个整数是否相等
- ne  //测试两个整数是否不等
- gt  //测试一个数是否大于一个数
- lt   // 测试一个数是否小于一个数
- ge   //小于或等于
- le   //小于或等于

字符测试`

==   // 等值比较,检查==两边都是有空格
 !=  //检查两边内容是否一致,不一致为真,一致为假
 =~   //左侧字符串能够被右侧的PATTERN所匹配到,此表达式应用于双中括号[[ ]]中
 -z “ string“  //测试指定字符串是否为空,空则为假
 -n  “string”   //测试指定字符串是否不空,不空则为真   空则为假

文件测试

// 存在性测试:
-e     // 测试文件是否存在
//   存在性质及类型是否存在
-b   //测试文件是否为块设备文件
-c   //测试文件是否为字符设设备文件
-f    //测试文件是否我普通文件
-d  //测试指定路径是否为目录
-h  //测试文件是否为符号链接文件
-L //测试文件是否为命名普通文件
-p  //测试文件是否为命名管道文件
-S    // 测试文件是否为套接字文件
//文件权限测试
-r  //测试当前用户对指定文件是否有读权限
-w  //测试当前用户对指定文件是否有读写权限
-x //测试当前用户对指定文件是否有执行权限
//  文件特殊权限测试
-g  //  测试文件是否有sgid 权限
-u // 测试文件是否有suid权限
-k  // 测试文件是否有sticky权限
//文件大小测试、
-s   //测试文件是否为空
// 文件是否打开测试
-t   fd  //fd 表示的文件描述是否已经打开且与某终端相关
// 双目测试:
file  -ef file2  //测试fle1  与file2是否指定同一个设备上相同inode,
file1 -nt file2   //测试file1是否比file2 新
file1  -ot  file2  //测试file1是否比file2旧
无分类:
-N    //测试文件自从上一次被读取过之后是否被修改过
-o   //测试文件是否存在并且当前用户拥有
-G  、、测试文件是否存在并且在默认组是否为当前用户组
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值