shell的运用

  shell 的参数链接

  介绍

shell:是一个用C语言编写的程序,它是用户使用linux的桥梁 ;shell是系统的用户界面提供了用户与内核进行交互操作的一种接口

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

Shell:还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令
 

 在公司中应用的环境:

 shell 脚本 :70%以上是和任务计划结合完成任务( 分 时 日 月 周   命令或者是脚本进行查看或者执行) ;或者做一些复杂的、重复性任务,可以帮助管理员实现批量化完成任务,实现自动化运维。

命令的分类

内部命令: 集成于shell 解释器内部的一些特殊指令,不对应单独的系统文件,自动载入内存,用户可直接使用的命令

外部命令:在Linux 系统中能够完成特定功能的脚本文件或二进制程序,每个外部命令会对应一个系统文件  (要想使用必须知道外部命令对应文件的位置)

注意 Linux系统会将外部命令所在的位置添加到默认的“搜索路径”中;所以用户在执行命令时不需要知道完整路径,直接执行该命令即可

任何一门语言都有解释器:python、php、java、c、c++ 等等,在所有语言运行的时候,都会先转换成机器码,然后在去运行

[root@C7--01 ~]# cat /etc/shells     #linux有6种解释器
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
        shell解释器以:


#!/bin/bash   或者   #!/bin/sh   为开头  
 


       python解释器以:

#!/usr/bin/env python  为开头  

shell脚本在执行命令的时候是从上往下依次执行,在运行期间如有其中一行执行错误,程序仍然会继续执行命令直到结束

                    测试


vim  cs.sh             #后缀.sh可加可不加,但是习惯性需要加上

#!/bin/bash
ls /root

echo "你好,世界"

zzzzzzz

sleep 3

echo "彩虹"


保存退出


[root@C7--01 ~]# bash cs.sh       #测试结果相同
anaconda-ks.cfg  cs.sh	yum.sh
你好,世界
cs.sh:行6: zzzzzzz: 未找到命令
彩虹
执行脚本操作
方法一 bash  脚本名称 不需要写解析器,并且不需要给脚本设置执行权限
bash  -n   脚本名称  -n  选项只做语法检查,而不执行脚本
bash  -vx  脚本名称 调试脚本,脚本输出
方法二 sh      脚本名称 不需要写解析器,并且不需要给脚本设置执行权限
方法三 source  脚本名称 不需要写解析器,并且不需要给脚本设置执行权限
方法四 ./   脚本名称   (在当前工作目录下执行脚本) 需要写解析器,需要给脚本设置执行权限

系统变量

$$ 返回当前shell本身进程号的PID
$! shell最后运行的后台procwss的PID(在shell里面嵌套shell所返回的PID)
$@ 所有参数列表,用  ""   括起来是以单体输出
$* 所有参数列表,用  ""   括起来是以整体输出
$- 使用set命令设定的Flag一览
$# 表示统计命令行中位置参数的个数
$0 表示当前执行的命令或脚本程序的名称
$? 用于查看前一条命令执行后的返回状态 (返回0 说明前一条命令正确;返回非0 值,说明前一条出现异常)
逻辑测试
&& 逻辑与,且的意思;要求所有的条件都得满足 (如果使用test 进行测试时,可以用 -a 代替)(前面的命令执行成功,才会执行后面的命令)
|| 逻辑或的意思;多个条件只要满足一个即可 (如果使用test 进行测试时,可以使用 -o 代替)
逻辑否的意思;表示“不”;当指定条件不成立时,测试命令返回值为 0

一、shell脚本变量

定义:是用来存放系统和用户需要使用的特定参数,这些特定参数会根据用户的设定或环境的变化而变化(可以变化的物理量)

变量的组成: 变量名 + 变量值; 定义变量的基本格式 “变量名=变量值”
变量名的命名规则:不能以数字和特殊符号开头

--------------系统变量




[root@C7--01 ~]# env     #输入env会输出系统本地原有的变量
XDG_SESSION_ID=25
HOSTNAME=C7--01
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.1.254 52271 22
SSH_TTY=/dev/pts/1
USER=root
.........
............

环境变量

定义:是出于运行需要,由Linux系统提前创建的一类变量,主要用于设置用户的工作环境;包括用户的宿主目录、命令查找路径、用户当前目录,登录终端等

注意:环境变量的值是随着Linux系统自动维护,会随着用户状态改变而自动改变

环境变量 说明
PATH 指定命令的搜索路径,以冒号为分隔符
HOME 指定用户的主工作目录
HISTSIZE 命令历史文件
LOGNAME 当前的登录名
HOSTNAME 主机的名称
SHELL shell的全路径名
TERM 用户控制终端的类型
PWD 当前工作目录的全称
PS1 命令基本提示符,root用户是“#”,对于普通用户是“"$"

案例

[root@C7--01 ~]# pwd
/root
[root@C7--01 ~]# echo $PWD
/root

自定义变量

定义:由系统用户自己去定义,只在用户的自己shell 环境中有效,又称为本地变量

定义自定义变量的基本格式 "变量名=变量值” (注意:变量名以字母或下划线开头,不能包含特殊字符(+,-,/,%,#等);等于号两侧没有空格)

注意:默认情况下,用户所定义的变量只在当前登录shell 中生效,在其他的子shell或其他终端,新shell环境中不生效,这种称为局部变量
全局变量:让用户所定义的变量能够在所有的子shell 环境中使用,减少重复设置工作 

 案例

[root@C7--01 ~]# bj=hd
[root@C7--01 ~]# echo $bj
hd

位置变量

在位置变量中空格输入在多其位置还是第一位,位置变量最多为9,但是超过9就是10两位,就需要  花括号  {}

[root@C7--01 ~]# vim wzbl.sh

#!/bin/bash
echo '$1'的值是"$1"
echo '$2'的值是"$2"
echo '$3'的值是"$3"
echo '$4'的值是"$4"
echo '$5'的值是"$5"
echo '$6'的值是"$6"
echo '$7'的值是"$7"
echo '$8'的值是"$8"
echo '$9'的值是"$9"
echo '$10'的值是"$10"


[root@C7--01 ~]# bash wzbl.sh     执行脚本
$1的值是
$2的值是
$3的值是
$4的值是
$5的值是
$6的值是
$7的值是
$8的值是
$9的值是
$10的值是0

                    案例 1
[root@C7--01 ~]# bash wzbl.sh            A  #不管空格输入了多少始终是第一位
$1的值是A
$2的值是
$3的值是
$4的值是
$5的值是
$6的值是
$7的值是
$8的值是
$9的值是
$10的值是A0                                 #  在系统环境中在识别时会认为是$1,我们的认为是$10


[root@C7--01 ~]# vim wzbl.sh

#!/bin/bash
echo '$1'的值是"$1"
echo '$2'的值是"$2"
echo '$3'的值是"$3"
echo '$4'的值是"$4"
echo '$5'的值是"$5"
echo '$6'的值是"$6"
echo '$7'的值是"$7"
echo '$8'的值是"$8"
echo '$9'的值是"$9"
echo '$10'的值是"${10}"                     #修改


[root@C7--01 ~]# bash wzbl.sh            A
$1的值是A
$2的值是
$3的值是
$4的值是
$5的值是
$6的值是
$7的值是
$8的值是
$9的值是
$10的值是                                   #无变量值
$@和$*的区别(注意是在for循环中,如有不同方法实现可留言
$@ 所有参数列表,用  ""   括起来是以单体输出
$* 所有参数列表,用  ""   括起来是以整体输出

案例

[root@C7--01 ~]# vim wzbl.sh

#!/bin/bash
echo '$1'的值是"$1"
echo '$2'的值是"$2"
echo '$3'的值是"$3"


for i in "$*"
do
    echo $i
done

for i in "$@"
do
    echo $i
done


保存退出




        验证位置变量:

[root@C7--01 ~]# bash wzbl.sh A B C
$1的值是A
$2的值是B
$3的值是C
A B C                              #$*是整体输出
A                                  #$@是单体输出
B
C
$# 表示统计命令行中位置参数的个数
$0 表示当前执行的命令或脚本程序的名称
$? 用于查看前一条命令执行后的返回状态 (返回0 说明前一条命令正确;返回非0 值,说明前一条出现异常)
$$ 返回当前shell本身的PID
[root@C7--01 ~]# vim wzbl.sh

#!/bin/bash
echo '$1'的值是"$1"
echo '$2'的值是"$2"
echo '$3'的值是"$3"


echo $#
echo $0
echo $?
echo $$


sleep 30              #进程保留30s


保存退出


            验证:

[root@C7--01 ~]# bash wzbl.sh A B C
$1的值是A
$2的值是B
$3的值是C
3                      #  $#  统计命令行中位置参数的个数
wzbl.sh                #  $0  当前执行的命令或脚本程序的名称
0                      #  $?  查看返回状态(返回0上一条命令执行成功,返回非0说明异常)
14947                  #  $$  当前shell本身的PID



          重新打开一个端口查询 


[root@C7--01 ~]# ps aux | grep 14947
root      14947  0.0  0.1 113132  1392 pts/1    S+   09:42   0:00 bash wzbl.sh A B C
root      14996  0.0  0.0 112676   980 pts/2    R+   09:42   0:00 grep --color=auto 14993

二、shell条件判断

基本相同: 七章——Shell脚本应用(二)(应用——linux高级管理)

目的:shell 环境会根据执行命令返回后状态值($?)来判断条件是否执行成功(返回值为0 表示成功;返回值为非0 值表示失败或异常)
进行条件判断的基本语法:
第一种:   test   条件表达式
第二种:   [  操作符   对象  ]  ("[" 和条件表达式之间最少要有一个空格)

 判断文件和目录的操作符

判断选项
-d 测试目录存在
-e
  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乘浪初心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值