shell基本介绍

shell  01

================================================

一,shell基本介绍

1,什么是shell

在Linux内核与用户之间的解释器程序

通常指 /bin/bash

负责向内核翻译及传达用户/程序指令

相当于操作系统的“外壳”

 

[root@svr7 ~]# cat /etc/shells   //查看所有解释器

[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键、历史命令、快捷键、别名、重定向、管道

 

2,什么是shell脚本

提前写好可执行的语句,能够完成特定任务的文件

按顺序、批量化处理

 

二,脚本编写

shell脚本的编写规范

  1. 声明解释器

#!/bin/bash

  1. 编写注释

#编写脚本功能、作者信息、变量作用等内容

  1. 执行指令

 

脚本的执行方式:

  1. 添加x权限,使用绝对或者相对路径执行

chmod  u+x  test01.sh

/opt/test01.sh

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

  1. 使用解释器执行脚本,无需x权限,会开启新bash进程

bash  test01.sh

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

  1. 使用source命令执行脚本,无需x权限,不会开启新bash进程

source  test01.sh

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

 

编写脚本,配置yum仓库

#!/bin/bash

#部署yum仓库

mount /dev/cdrom /mydvd

rm -rf /etc/yum.repos.d/*.repo

echo "[abc]

name=xxx

baseurl=file:///mydvd

enabled=1

gpgcheck=0" > /etc/yum.repos.d/abc.repo

 

编写脚本,安装httpd服务,需要开机自启并且主页显示内

容为”web-test~~~”

vim  /opt/test04.sh

#!/bin/bash

yum -y install httpd   //装包

echo "web-test~~~" > /var/www/html/index.html   //定义主页内容

systemctl restart httpd    //开服务

systemctl enable httpd    //设置开机自启

 

之后使用bash  test04.sh 执行脚本

curl  192.168.4.7  可以看到页面内容

 

编写脚本,开启ftp服务,并实现开机自启

yum -y install vsftpd &> /dev/null   //安装ftp,不显示任何信息,dev下

的null相当于黑洞,不需要的信息都可以扔到里面让其消失。

systemctl restart vsftpd

systemctl enable vsftpd

 

>    正确信息重定向

2>   错误信息重定向

&>   所有信息重定向

 

------------------------------------------------

三,变量

 

常量  固定不变

变量  使用固定的名称存放可能会发生变化的内容(值),可以提高脚本

的灵活度、提高适应力

 

变量的种类

  1. 自定义变量,名称可以用数字、字母、下划线,不能以数字开头,不能

使用特殊符号。

变量名称=变量的值

a=10   //创建变量

echo  $a  //调用变量

unset  a  //取消变量

echo ${a}RMB   //使用大括号可以避免混淆

 

  1. 环境变量,由系统提前定义好,使用时直接调用

USER  当前用户名   HOME  当前用户的家目录    UID  当前用户的id号

SHELL  当前用户的解释器   HOSTNAME  主机名   PWD  当前位置

PATH  存储命令路径

 

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

         $1   执行脚本时后面跟的第1个位置参数 

         $2   执行脚本时后面跟的第2个位置参数

         $3   执行脚本时后面跟的第3个位置参数

         $*   执行脚本时后面跟的所有位置参数

         $#   执行脚本时后面跟的所有位置参数的个数

         $$   随机的进程号

         $?   判断上一条指令是否成功,0是成功,非0是失败

 

编写脚本,创建用户abcd,配置密码123456

#!/bin/bash

useradd abcd

echo "123456" | passwd --stdin abcd

 

改良版

#!/bin/bash

useradd $1   //使用位置变量$1,在执行脚本时灵活定义用户名

echo "$2" | passwd --stdin $1   //使用位置变量$2定义密码

 

bash test07.sh xyz 123   //执行脚本时,脚本名字后面跟的第一个

位置参数是xyz,在脚本中作为要创建的用户名,第二个位置参数

是123,在脚本中作为配置的密码  

 

-----------------------------------------------

env  //可以显示所有环境变量

env | grep HOSTNAME   //可以配合grep搜索

set  //显示所有变量

abcd=8888

set | grep abcd  //可以配合grep搜索

-----------------------------------------------

四,变量的扩展知识

  1. 引号与反撇号

" "  双引号   界定范围

' '   单引号   界定范围  屏蔽特殊符号功能

``   反撇号   可以获取命令的执行结果,或者使用$( )可以实现

                             相同效果

  1. 使用read指令,以交互式使用脚本

#!/bin/bash

read  -p  "请输入用户名称:"  n   //使用变量n存储用户敲的名字

useradd $n

read  -p  "请输入密码:"  m      //使用变量m存储用户敲的密码

echo "$m" | passwd --stdin $n

 

----------------------------------------

stty  -echo  屏蔽回显

stty  echo   恢复回显

-----------------------------------------

再次改良脚本:

#!/bin/bash

read -p "请输入用户名称:" n

useradd $n

stty -echo

read -p "请输入密码:" m

echo

stty echo

echo "$m" | passwd --stdin $n

 

  1. 使用export发布全局变量

局部变量 ,仅当前解释器进程中可以使用的变量

全局变量,解释器进程产生的子进程也可以使用的变量

a=10   //创建变量,默认是局部变量

export  a  //将已有的局部变量发布为全局变量

export  b=20  //创建全局变量

export  -n  b  //将全局变量恢复成局部变量

注意,测试时要在父进程创建变量,然后可以执行bash进入

子进程测试效果,如果要返回父进程要执行exit指令

 

 

---------------------------------------------------------------------------------------

练习题:

1,如何执行Shell脚本?

 

2 自定义Shell变量时,有哪些注意事项?

 

3 编写一个Shell脚本程序,用来报告当前用户的环境信息。

 

4 简述预定义变量$$、$?、$#、$*的作用。

 

5 编写一个Shell脚本程序,能够部署ftp服务,并开启ftp默认共享的目录权限。

 

6 简述单引号、双引号、反撇号在变量赋值操作中的特点。

 

 

1,如何执行Shell脚本?

方法一:添加x权限,然后使用路径运行

方法二:bash 脚本文件路径

方法三:source 脚本文件路径

 

2 自定义Shell变量时,有哪些注意事项?

可以包括数字、字母、下划线,不能以数字开头

赋值时等号两边不要有空格

尽量不要使用关键字和特殊字符

给同一个变量多次赋值时,最后一次的赋值生效

 

3 编写一个Shell脚本程序,用来报告当前用户的环境信息。

新建脚本文件report.sh,执行后能够输出当前的主机名、登录用户名、所在的文件夹路径。

 

#!/bin/bash

echo "当前的主机名是:$HOSTNAME"

echo "登录用户是:$USER"

echo "当前位于 $PWD 文件夹下"

 

4 简述预定义变量$$、$?、$#、$*的作用。

$$ 保存当前运行进程号

$? 保存命令执行结果的(返回状态)0是成功,非0是失败

$# 保存位置变量的(个数)

$* 保存所有位置变量的(值)

 

5 编写一个Shell脚本程序,能够部署ftp服务,并开启ftp默认共享的目录权限。

#!/bin/bash

yum -y install vsftpd &> /dev/null

systemctl restart vsftpd

systemctl enable vsftpd

chmod 777 /var/ftp/pub     //pub目录是默认的共享目录,777可以开放所有权限

 

6 简述单引号、双引号、反撇号在变量赋值操作中的特点。

双引号 " ":可以界定范围

单引号 ' ':可以界定范围,还可以屏蔽特殊符号,即便 $ 也视为普通字符

反撇号 ` `:可以获取命令的执行结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值