Linux:shell脚本:基础使用(1)


Shell的作用

命令解释器,“翻译官”,介于系统内核与用户之间,负责解释命令行


用户的登录Shell

登录后默认使用的Shell程序,一般为 /bin/bash
不同Shell的内部指令、运行环境等会有所区别

cat /etc/shells

Linux:shell脚本:基础使用(1)_第1张图片


编写第一个Shell脚本 

 格式以*.sh

*是你起的名字,什么名字无所谓,但是结尾必须是sh为结尾的

vim ceshi.sh

里面可以写一些命令,他执行bash命令是依次从上到下执行的

由于是刚刚接触,可以先编写一些简单的语句,这里所谓的语句,就是平时使用的命令

Linux:shell脚本:基础使用(1)_第2张图片

你可以随便写一些,目前这个还是很好理解的


执行脚本的办法

一:./脚本文件路径
二:sh  脚本文件路径
三:source  脚本文件路径

使用第一种要为其设置执行权限         ./脚本文件路径

Linux:shell脚本:基础使用(1)_第3张图片

chmod +x ceshi.sh

Linux:shell脚本:基础使用(1)_第4张图片

第二种和第三种可以不给执行权限   但是他们的结果都是一样的

  

 三种执行方式,都是一样的效果

Linux:shell脚本:基础使用(1)_第5张图片

写入的都是依次执行的


 更完善的脚本构成

为了更完善脚本,向上面那样,也是可以执行的,但是可能会给后来的人添加难度

Linux:shell脚本:基础使用(1)_第6张图片

最好是第一排声明脚本运行的环境

注释信息  以‘#’开头的行为注释行 ,注释行不会执行


重定向 

【类型】【操作符】【用途】

重定向输入 ; < ; 从指定的文件读取数据,而不是从键盘输入

重定向输出; > ;将输出结果保存到指定的文件(覆盖原文件)

重定向输出;>>; 将输出结果追加到指定的文件

标准错误输出;2> ;将错误信息保存到指定的文件(覆盖原文件)

标准错误输出;2>>; 将错误信息追加到指定的文件中

混合输出;&> ; 将标准输出、标准错误的内容保存到同一个文件中

例如下面的

uname -p > kernel.txt

# 将uname 输出的东西写入到 kernel.txt中,并覆盖原有内容

uname -r >> kernel.txt

#将输出内容追加到 kernel.txt ,不会覆盖原文件内容,只是在结尾处新加追加内容

echo "123456" > pass.txt

cat pass.txt

useradd tom

passwd --stdin tom < pass.txt

# 将pass.txt文件内容当成密码,输入到tom的密码里,也就是把tom密码设置为123456


管道操作

将左侧的命令输出结果,作为右侧命令的处理对象 

也就是说,第一次的结果上再次进行第二次处理

例如:

df -hT

Linux:shell脚本:基础使用(1)_第7张图片

 查看磁盘使用情况

df -hT | grep '/$'

Linux:shell脚本:基础使用(1)_第8张图片

  查看磁盘使用情况 ,并检索前面输出内容中以/结尾的

df -hT | grep '/$' | awk '{print $1}

Linux:shell脚本:基础使用(1)_第9张图片

查看磁盘使用情况 ,并检索前面输出内容中以/结尾的,并查看里面的第一个信息 默认是以空格切割开的,$1 就是第一块   $4就是第四块     $1,$3就是看第1块和第三块1的

Linux:shell脚本:基础使用(1)_第10张图片


自定义变量

变量名=变量值

变量名以字母或下划线开头,区分大小写,建议全大写 

如果要查看的话可以使用
echo  $变量名 

变量名=变量值

定义了一个变量  为a赋值了,如果要查看

echo  $变量名 

Linux:shell脚本:基础使用(1)_第11张图片

 现在我们再赋值一个b值为world

Linux:shell脚本:基础使用(1)_第12张图片

输出多个变量可以使用

echo $变量名 $变量名   (中间有没有空格都可以)

Linux:shell脚本:基础使用(1)_第13张图片  

变量后面添加别的可以使用 

 echo ${变量名}其他的字符

Linux:shell脚本:基础使用(1)_第14张图片

赋值时使用引号的含义

双引号   " 

Linux:shell脚本:基础使用(1)_第15张图片

可以有空格或者其他其他符号  但是写了变量格式,就会输出变量

单引号     ' 

Linux:shell脚本:基础使用(1)_第16张图片

使用变量并不会生效,同时也支持符号


反撇符号的使用 `  

例如:

ls -lh `which useradd`

Linux:shell脚本:基础使用(1)_第17张图片

其中的含义和  ls -lh /usr/sbin/useradd  是一样的

他会优先处理 ··  里的内容然后将 ·· 的输出内容添加到前面的命令中

rpm -qc `rpm -qf `which useradd``

例如这个意思上是对的但是输出结果不对,我们还有另外一种写法

rpm -qc $(rpm -qf $(which useradd))

也是依次执行

先执行最里面的

Linux:shell脚本:基础使用(1)_第18张图片


read输入变量

read 变量名

输入变量内容

Linux:shell脚本:基础使用(1)_第19张图片

输入完变量值后回车

Linux:shell脚本:基础使用(1)_第20张图片

如果需要带有输入提示的read可以使用

read -p '提示语句' 变量名

 Linux:shell脚本:基础使用(1)_第21张图片

现在ppp的变量值为hello world

Linux:shell脚本:基础使用(1)_第22张图片  


设置变量的作用范围

变量范围分为局部变量全局变量 

向上面我们设置的变量全为局部变量

Linux:shell脚本:基础使用(1)_第23张图片

 如上图,我们在bash里设置了变量,当我们在当前bash里查看就可以查看到,当我们切换进入子bash里查看就查看不到了-------这个就是局部变量

设置全局变量

export 变量名=变量值

Linux:shell脚本:基础使用(1)_第24张图片

将局部变量转换为全局变量 

Linux:shell脚本:基础使用(1)_第25张图片

 现在q和w均为局部变量

使用

export 变量名 后面可以跟多个变量名

export 变量名 变量名 ……

Linux:shell脚本:基础使用(1)_第26张图片


整数变量的运算(expr)

expr  变量1   运算符  变量2  [运算符 变量3] ... 

 常用运算符
*加法运算:+

*减法运算: -

*乘法运算: \*

*除法运算: /

*求模(取余)运算: % 

$()  --- 命令嵌套``

${}  -----  解决变量名混淆问题

$(())  --- 实现整数的混合运算

 Linux:shell脚本:基础使用(1)_第27张图片


特殊的Shell变量 

由系统提前创建,用来设置用户的工作环境 

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

常见的环境变量:
*PWD、PATH
*USER 、SHELL、HOME 

这些我们没有手动创建,是系统自动创建的

例如我们制作用户登录的欢迎脚本 

vim /opt/tarro.sh

写入
#!/bin/bash
echo "欢迎名称为: $USER  的用户登录"
chmod +x /opt/tarro.sh 
vim /etc/profile

在最后一行输入
source /opt/tarro.sh

Linux:shell脚本:基础使用(1)_第28张图片


位置变量

意思就是当我们在脚本里写了变量,但是没有明确给变量的变量值

我们可以在执行脚本的时候在后面把值写上  空格隔开,每个值对应着相应位置的变量

随便创建一个脚本里面写入

Linux:shell脚本:基础使用(1)_第29张图片

这时hello就对应着$1 world对应着$2 

Linux:shell脚本:基础使用(1)_第30张图片

 没有明确写变量值的变量可以在执行脚本前后面加上对应的值

你可能感兴趣的:(linux,运维,服务器,shell脚本)