shell编程学习(一)


在工作中,我们往往需要编写一些shell 脚本来进行程序或者服务器的维护.

基本介绍

Shell是一个命令行解析器,它为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序, 用户可以用shell 来启动, 挂起,停止甚至是编写一些程序.

原理

应用程序>> shell 命令解析器 >> 内核linux >> 硬件

shell变量的介绍

1.分为系统变量和用户自定义变量
2.系统变量: $HOME,$PWD, $SHELL, $USER 等等
3.显示当前shell 中所有变量: set
定义变量: 变量名= 值
撤销变量: unset 变量
声明静态变量:readonly 变量(注意: 静态变量不能unset)
使用变量的方法: $变量名

shell变量的定义

定义规则:1.变量名称可以由字母,数字和下划线组成,但是不能以数字开头
2.等号两侧不能有空格
3.变量名称一般习惯为大写(比如JAVA_HOME ,以及系统变量)
将命令的返回值赋给变量:

1.A=`ls -la`反引号,运行里面的命令,并把结果返回给变量A
2.A=$(ls -la) 等价于反引号(一般都用这个,比较舒服)

单行注释和多行注释

使用”#”号开头就是单行注释
多行注释 :<<! shell内容 !

shell环境变量

设置环境变量的方法
1.修改etc/profile;
2.定义一个自己的环境变量,并且 export 该变量;
3.用source /etc/profile 去刷新环境变量;
注意: 环境变量要用大写;
可以自定义个PATH变量,类似windows的path , 多个软件的bin目录用 : 连接;
Export 后面可以有多个变量;

位置参数变量

什么是位置参数?
就是执行shell 脚本的时候,如果希望获得命令的参数信息, 就可以使用参数变量.

位置参数变量的基本语法

$n n是纯数字, $0是命令本身, $1~9代表第一个到第九个参数;十以上的参数要用 ${10} 这样,大括号
$* 是命令行中所有的参数,把参数看成一个整体
$@ 是命令行中所有的参数, 不过会把每个参数区分对待
$# 是代表命令行中的参数的个数

预定义变量

基本介绍: 就是shell 设计者事先已经定义好的变量,可以直接在shell 脚本中使用
$$ 当前进程的进程号
$! 后台运行的最后一个进程的进程号
$? 最后一次还行的命令返回的状态. 如果这个变量的值是0, 证明上一个命令正确执行; 如果非0 则证明上一个命令执行不正确.

shell运算符

基本介绍: 学习如何在shell中进行各种运算操作

基本语法(1) $((运算式)) 或者 $[ 运算式 ]
我们一般都是使用$[运算式] 这种,比较好用
(2) 使用 expr m + n 
注意 expr 运算符间要有空格, 而且 \* 代表乘,做了转义字符
而且 expr 外面要有`` 包含着

使用示范

#!/bin/bash
num=$(((2+3)*4))
echo $num
num1=$[(5+3)/2]
echo $num1
num2=`expr 6 + 3`
tmp=` expr $num2 \* 3  `
echo $tmp 
result=$[$1+$2]
echo $result

判断语句

基本语法:

[ condition ] 注意condition 前后要有空格
非空返回true, 可以使用 $? 验证
应用实例:
[ hello ] 返回true
[] 返回false
[ condition ] && echo OK || echo no 条件满足,执行后面的语句

常用判断条件

一.两个整数的比较
=字符串比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于等于
-ge 大于等于
-ne 不等于
二.按照文件权限进行判断
-r 有读的权限
-w 有写的权限
-x 有执行的权限
三. 按照文件类型进行判断
-f 文件存在并且是一个常规的文件
-e 文件存在
-d 文件存在并且是一个目录
四. 代码示范

#!/bin/bash
if [ "ok" = "ok" ]
then 
     echo "相等"
fi

if [ 23 -gt 23 ]
then 
     echo "相等"
else
     echo "不相等"
fi


if [  -d  /root ]
then 
     echo "目录存在"
else
     echo "目录不存在"
fi

文章作者: 陌上人如玉
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 陌上人如玉 !
  目录