Shell基础

目录

了解Shell

        Linux常见的shell

                什么是shell脚本及构成

                脚本执行逻辑及执行方式

                查看代码正确

                shell脚本应用场景

重定向与管道操作

                交互式硬件设备

                 重定向操作

                多行重定向

变量

                变量类型

                 shell字符串


了解Shell

        Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

        Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

        Ken Thompson的sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。

        Linux常见的shell

先查看一下本机的shell信息

[root@localhost data]#cat /etc/shells 
/bin/sh                      
/bin/bash                    
/sbin/nologin                
/usr/bin/sh                  
/usr/bin/bash               
/usr/sbin/nologin
/bin/tcsh
/bin/csh

bash:基于gun框架下发展的shell

csh:类似c语言的shell

tcsh:整合了csh提供了更多的功能

sh:已经被bash替换

nologin:这个shell可以让用户无法登录

bash(/bin/bash)是目前大多数Linux版本采用默认的shell

                什么是shell脚本及构成

        shell脚本就是将命令按顺序一一列出,最后自动执行;执行需要权限,也可以直接使用(绝对路径),脚本其实不复杂,通用脚本环境变量改变后依然可以使用的脚本,Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。

构成

1、脚本声明(解释器),第一行开头"#!/bin/bash"表示此行以下的语句是通过/bin/bash程序来解释执行。#!/bin/bash为默认的解释器还有其他类型的解释器“#!/bin/python、#!/bin/expect”

2、注释信息:以#开头的语句表示为注释信息

3、可执行语句:比如echo命令用于输出“   ”之间的字符串

                脚本执行逻辑及执行方式

        脚本执行逻辑

1、顺序执行:程序按上从下顺序执行

2、选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行

3、循环执行:程序执行过程中需要重复执行多次某段语句

        执行方式

1、指定路径去执行文件(需要执行权限)

[root@localhost data]#vim first.sh

  直接执行会报没有权限

 给一个执行权限,再执行就好了

[root@localhost data]#chmod +x first.sh

 2、还可以指定解释器去执行(不需要权限)

[root@localhost data]#bash first.sh 
Hello world

                查看代码正确

有个错误脚本

 

        bash -n 脚本名称(不在当前目录要加绝对路径),检查语法错误,并不执行脚本

[root@localhost data]#bash -n first.sh

        bash -x 脚本名称(不在当前目录要加绝对路径),执行脚本,输出执行过程

[root@localhost data]#bash -x first.sh 
+ echo=
+ 'Hello world'
first.sh:行5: Hello world: 未找到命令

                shell脚本应用场景

⚫重复性操作

⚫交互性任务

⚫批量事务处理

⚫服务运行状态监控

⚫定时任务执行

............

重定向与管道操作

                交互式硬件设备

        标准输入:从该设备接收用户输入的数据

        标准输出:通过该设备想用户输出数据

        标准错误:通过该设备报告执行出错信息

类型设备文件文件描述编号默认设备
标准输入/dev/stdin0键盘
标准输出/dev/stdout1显示器
标准错误输出/dev/stderr2显示器
[root@localhost data]#ll /dev/std* tty

                 重定向操作

类型操作符用途
重定向输入<从指定的文件读取数据,而不是从键盘输入
重定向输出>将输出结果保存到指定的文件(覆盖原有内容)
>>将输出结果追加到指定的文件尾部
标准错误输出2>将错误信息保存到指定的文件(覆盖原有文件)
2>>将错误信息追加到指定的文件中
混合输出&>将标准输出、标准错误的内容保存到同一个文件中

例如改用户改密码,就可以用标准输入实现

[root@localhost data]#echo "123123" |passwd --stdin xiaobin
更改用户 xiaobin 的密码 。
passwd:所有的身份验证令牌已经成功更新。

还可以用文件传输

[root@localhost data]#vim paswd.txt
[root@localhost data]#passwd --stdin xiaobin < paswd.txt 
更改用户 xiaobin 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost data]#cat paswd.txt 
123123

                多行重定向

        在自动化运维中,常常需要shell脚本。在自动化创建脚本时,会遇到脚本内容里有用EOF重定向到配置文件的代码。

 新建一个空白文件夹

[root@localhost data]#vim passwd.txt

编写一个脚本

[root@localhost data]#vim 2.sh

想新建文件传输东西即可 

 

[root@localhost data]#cat passwd.txt 
	This is line 1 of the message.
        This is line 2 of the message.
        This is line 3 of the message.
        This is line 4 of the message.

        另外一种,没看懂全英文,没琢磨,有爱好的大佬可以https://linux.die.net/abs-guide/here-docs.html研究一下

变量

                变量类型

自定义变量:由用户自己定义,修改和使用

环境变量:由系统维护,用户设置工作环境

只读变量:只可以读取,不可以更改

位置变量:通过命令行给脚本传递参数

预定义变量:bash中内置的一类变量,不能自己修改

系统内置变量:PATH,UID,HOSTNAME

查看变量

[root@localhost data]#env

定义一个变量

 输出结果

[root@localhost data]#bash mybin.sh 
11 十一

使用变量递增


mybin=11
mybin=$[mybin+1]
#mybin2='十一'

echo $mybin
~                                                              
~             
[root@localhost data]#bash mybin.sh 
12

还可以结合read -p命令实现交互式的获取变量 

 

[root@localhost data]#bash first.sh 
Enter a number:b
b

删除一个变量

unset mybin
echo $mybin
[root@localhost data]#bash mybin.sh 

        有意思的是只读变量,不能修改,只可以让你看,需要一些牛逼的命令行操作才可以,一般没啥人用

         readonly是定义只读变量

readonly mybin2=1

mybin2=$[mybin2+1]
echo $mybin2
unset mybin2 

运行它会提醒你它是个只读变量 ,还不能删除

[root@localhost data]#bash mybin.sh 
mybin.sh:行14: mybin2: 只读变量
1

[root@localhost data]#bash mybin.sh 
mybin.sh:行14: mybin2: 只读变量
mybin.sh: 第 15 行:unset: mybin2: 无法反设定: 只读 variable
1

位置变量和预定义变量都是内部变量

写进脚本

#!/bin/bash
echo $0            #表示文件本身,当前执行的脚本或程序名称 
echo $1
echo $2
echo $3                 #位置变量(位置参数)
echo $4
echo $5
echo $6
echo $7
echo $8
echo $9
echo $@              #单输出,每一个都是独立的个体返回
echo $*               #输出所有,表示所有位置参数内容看成一个整体返回
echo $?              #表示前一条命令执行后的返回状态,返回值为0正确,返回值非0表示错误
echo $#              #表示命令行中位置参数的个数
echo $$              #脚本进程的ID
echo $PPID           #父进程id

运行脚本

                 shell字符串

赋值使用(“”)双引号,表示可以直接调用变量

赋值使用(‘’)单引号,$只会被认为是字符串$不会调用变量

赋值使用(``)反撇号,命令替换,提取命令执行后面输出结果,和$()用法相同

{}可以分隔变量值和普通值

生成随机数

[root@localhost data]#echo $[RANDOM]

30以内的随机数 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小柏ぁ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值