0501、shell概述、编写及执行脚本、shell变量、变量扩展知识、运算

目录

一、shell概述

1、什么是shell

2、shell使用方式:

3、解释器

二、编写及执行脚本

1、什么是shell脚本

2、脚本创建三步走

3、shell脚本编写规范

4、脚本的执行方式

5、示例

(1)、搭建Yum

(2)、编写脚本,安装网站服务并开启,浏览网站时显示"web-test~

(3)、编写脚本,安装ftp服务并开启且设置为开机自启

三、shell变量

1、变量的种类

(1)、自定义变量

(2)、环境变量,由系统提前定义好,使用时直接调用

(3),位置变量与预定义变量

四、变量的扩展知识

1、引号和反撇号

2、read标准输入取值

read 从键盘读入变量值完成赋值

终端显示控制stty    -echo  :  关闭终端输出(无显示)stty     echo  :  恢复终端输出(有显示)

示例:

3、使用export发布全局变量

五、运算

加、减、乘、除、求模(取余数)

1、使用expr命令,可以运算并输出结果

2,$[  ]   运算  使用$((  )) 可以实现相同效果

3、let命令

4、使用bc,可以进行小数计算


一、shell概述

1、什么是shell

shell是在Linux内核与用户之间的解释器程序 通常指 /bin/bash
用户登陆之后 ---> 系统自动打开bash --->  ls、pwd、cat......

负责向内核翻译及传达用户/程序指令(Shell相当于翻译官,解释说明用户输入的命令给系统)相当于操作系统的“外壳”

2、shell使用方式:

交互式   —— 命令行

  • 人工干预、智能化程度高
  • 逐条解释执行、效率低

非交互式 —— 脚本

  • 需要提前设计、智能化难度大
  • 批量执行、效率高
  • 方便在后台静悄悄地运行

3、解释器

[root@svr7 ~]# cat /etc/shells   //查看所有解释器
/bin/sh               #多数Unix默认的Shell
/bin/bash          #多数Linux默认的Shell
/sbin/nologin    #非登陆Shell
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
/bin/ksh
/bin/rksh

[root@svr7 ~]# sh    //切换成sh解释器
sh-4.2# ls    //利用sh解释器输入命令
sh-4.2#exit   //退出sh解释器
[root@svr7 ~]#yum -y install ksh   //安装新解释器
[root@svr7 ~]#ksh   //进入新解释器

bash解释器的优点:
tab键、
快捷键、
历史命令、
支持别名、
管道、
重定向

二、编写及执行脚本

1、什么是shell脚本

shell脚本:提前写好可执行的语句,可以完成特定任务的文件按顺序、批量化执行

2、脚本创建三步走

(1)、新建文本文件    .sh后缀
(2)、添加可执行的脚本语句(命令行
(3)、添加 x 执行权限

3、shell脚本编写规范

  (1)、声明解释器       (可不写的,但不专业)

      #!/bin/bash

  (2)、编写注释           

     #可以描述脚本功能、变量作用等信息

  (3)、执行指令

    ls
    cd

    。。。
    。。。

4、脚本的执行方式

(1)、为脚本添加x权限,使用相对或者绝对路径执行

chmod u+x test01.sh

./test01.sh   或者   /opt/test01.sh
相对路径                    绝对路径

用户(root)--->  bash  --->   bash  --->   echo 

(2),使用解释器程序执行脚本,无需x权限

bash  test01.sh(相对路径)

用户(root)---> bash(父) --->   bash(子)--->  echo   会开启子进程
注:父bash 开启一个子进程bash  去执行脚本,子进程bash执行完事儿之后就会自动退出了,就会发返回父进程所在的(位置)状态

(3),使用source命令执行脚本,无需x权限

source   test01.sh(相对路径)

用户(root)---bash---echo        #不会开启子进程,父进程bash亲自上阵,他执行完进程会改变自己所在的位置状态

5、示例

(1)、搭建Yum

#!/bin/bash
#搭建yum软件仓库
mkdir   /abc
mount    /dev/cdrom   /abc
rm  -rf   /etc/yum.repos.d/*.repo
echo "[abc]
name=abcabc
baseurl=file:///abc
enabled=1
gpgcheck=0" > /etc/yum.repos.d/abc.repo

(2)、编写脚本,安装网站服务并开启,浏览网站时显示"web-test~

#!/bin/bash
#搭建网站
yum -y install httpd
echo "web-test~~" > /var/www/html/index.html
systemctl restart httpd

(3)、编写脚本,安装ftp服务并开启且设置为开机自启

  > 重定向标准输出
2> 重定向错误输出
&> 重定向所有输出

#!/bin/bash
yum -y install vsftpd     &>     /dev/null   //将不需要的信息扔黑洞
systemctl restart vsftpd
systemctl enable vsftpd

三、shell变量

变量     使用固定的名称存放可能发生变化的值,可以提高脚本的灵活度、适应力

常量     固定不变的内容

1、变量的种类

(1)、自定义变量

名称可以用数字、字母、下划线,不能以数字开头不能使用特殊符号等号两边不能有空格

变量名称=值

  •    a=10        //创建变量(对变量赋值),名字是a,值是10
  •    a=30        //再次赋值,之前的会被覆盖
  •    echo   $a //调用变量时使用$符号     #查看变量
  •    unset  a   //取消变量的定义  或者:退出定义变量的shell环境时,变量会自动实效
  •    a=            //将变量a赋值为空,效果同上
  •    echo ${a}RMB   //变量名容易与后续字符发生混淆时   使用大括号隔开

(2)、环境变量,由系统提前定义好,使用时直接调用

配置文件:/etc/profile    、    ~/.bash_profile

—env:列出所有的环境变量
—set:列出所有变量

全是大写

USER             当前用户名    
UID                  当前用户的id号    
HOME             当前用户家目录
HOSTNAME 主机名  
SHELL           当前用户的解释器  
PWD               当前位置
PATH              存储命令的路径  
PS1                一级提示符     ---[root@svr7 ~]#----- [\u@\h \W]\$
PS2                二级提示符    默认 >               \   换行继续敲

(3),位置变量预定义变量

$1  执行脚本时后面第1个位置参数
$2  执行脚本时后面第2个位置参数
$3  执行脚本时后面第3个位置参数

$*  执行脚本时后面所有位置参数
$#  执行脚本时后面位置参数的个数
$$  随机进程号
$?  判断上一条指令是否执行成功,0是成功,非0是失败

示例:

编写脚本,创建用户tom,配置密码123456
#!/bin/bash
useradd tom
echo "123456" | passwd --stdin tom

改良版
#!/bin/bash
useradd $1
echo "$2" | passwd --stdin $1
[root@svr7 opt]#bash useradd.sh   natasha  123

四、变量的扩展知识

1、引号和反撇号

双引号 "  ":允许扩展,以$引用其他变量

单引号  '  ' :  仅用扩展,即便$也视为普通字符(界定范围)

反撇号 `  `: 将命令的执行输出作为变量值   ---   $() 与  `  `  等效,但$()更方便嵌套使用

a=date     //仅仅将四个字母赋值给a
a=`date`    //将date执行结果赋值给a
a=$(date)   //效果同上

[root@svr7 ~]#  echo      "当前的用户是:$USER"
当前的用户是:root
[root@svr7 ~]#echo '当前的用户是:$USER'
当前的用户是:$USER
[root@svr7 ~]#echo 当前的工作目录是:$(pwd)
当前的工作目录是:/root

2、read标准输入取值

read 从键盘读入变量值完成赋值

格式:read [  -p  " 提示信息 "  ]    变量名
   -p是可以定义提示信息,  
   -t  可指定超时秒数

终端显示控制
stty    -echo  :  关闭终端输出(无显示)
stty     echo  :  恢复终端输出(有显示)

示例:

useradd   $u
read -p "请输入密码"  n
echo   "$n"  |  passwd  --stdin   $u

stty  -echo 屏蔽回显
stty  echo 恢复回显

再次改良脚本:

#!/bin/bash
read  -p   "请输入用户名"   u
useradd  $u
stty  -echo
read  -p  "请输入密码"  n
stty  echo
echo  "$n" | passwd  --stdin  $u

3、使用export发布全局变量

局部变量 仅仅在当前解释器进程中使用的变量
全局变量 解释器产生的子进程中也可以使用的变量

a=10   //创建变量
export  a   //将已有变量发布为全局效果

export  b=20   //创建变量的同时发布为全局效果
export  -n  b   //将全局变量恢复为局部变量

注意,测试时要在父进程创建变量,然后可以执行bash进入子进程测试效果,如果要返回父进程要执行exit指令

pstree | grep bash     #查看进程树

五、运算

加、减、乘、除、求模(取余数)

1、使用expr命令,可以运算并输出结果

expr  1  +  1            //加法,运算符号两边要有空格

expr  2 – 1              //减法

expr  2  '*'  2          //乘法,单引号可以屏蔽特殊符号*的功能,本身是通配符,而不是乘号,屏蔽之后就可以识别为乘号
expr  2  \*  2            #   \是转义符号可以屏蔽身后一个特殊符号的功能

expr  4  /  2             //除法

expr  5  %  2          //取余数

例子:
a=10
b=20
expr $a + $b
expr $a + 100
expr $a + $a

2,$[  ]   运算  使用$((  )) 可以实现相同效果

echo $[2*2]

echo $[2-2]

echo $[2/2]

echo $[2%2]

例子:
a=10
b=20
expr $a + $b
echo $[a+b]

3、let命令

主要服务变量,不输出结果
创建变量
变量自增减 

let a=1+1   //创建变量
变量的自增减:

常规写法          主流写法

let a=a+1           let a++       #变量a加1

let a=a-1            let a--         #变量a减1

let a=a+10        let a+=10   #变量a加10

let a=a-10         let a-=10    变量a减10

let a=a*2           let a*=2      #变量a乘以2

let a=a/2           let a/=2       #变量a除以2

let a=a%3        let a%=3     #变量a除以3取余数

4、使用bc,可以进行小数计算

echo "10/3"  |  bc
3
echo "scale=2;10/3"  |  bc      //scale可以定义结果是小数点后多少位
3.33

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值