shell脚本

shell脚本

一、概念

1、定义

脚本就是可运行的代码集合,脚本语言(计算机语言)

2、特点

从上到下,按行执行

python脚本语言,格式更严谨 严格的执行缩进,也是从上到下按行执行

shell脚本就是在shell环境(/bin/bsah),bash就是shell的解释器。shell脚本就是linux环境下的编程语句。

3、意义

自动化运维。可重复执行的,自动化的在系统中实现增删改查的操作。

4、解释器

默认是bash

5、其他解释器

这些解释器均在/usr/bin目录下

sh:已经淘汰、bash:sh的扩展版、csh:类c语言、tcsh:整合了c语言的shell、nologin:用户无法登录到系统的shell

6、作用

6.1 自动化运维(配合定时任务执行)

6.2 批量化的重复操作以及配合定时任务执行

6.3 有了脚本可以减轻管理员的工作量

6.4 避免配置出错

6.5 提高处理批量文件的速度

7、构成

第一行:声明解释器(默认是bash,可不写)

注释:以#开头,就是注释的信息,注释的部分不会被执行

可执行语句:linux的命令都可以作为可执行语句,一行一行的往下写。一行就是一个可执行的语句。

#!/bin/bash
#声明shell的解释器,默认就是bash,可以不写,/python expect,只要不是默认shell,其他的都要声明解释器
#被注释掉的部分是不会被执行的,步骤的含义。
#可执行语句:
#this is my first shell
cd /boot
echo "当前的目录位置:"
#echo的作用就是打印
pwd
echo "展示其中以vml开头的文件:"
ls -lh vml*

8、执行方式(3种)

8.1 非赋权执行

不给脚本执行权限的方式(调试bash、sh)

sh、bash:就是在当前的shell里生成一个子shell,运行结果不改变父shell的环境,bash亦是如此。
source:点命令. 会改变当前shell的环境,也就是真正的执行代码。
# 当前目录./脚本 非当前目录/opt/脚本
8.2 赋权执行

脚本调试完毕,都是赋权执行(chmod 777 test.sh)

重定向操作:标准输入、标准输出、标准错误输出
重定向输出:>   >> 
> 只能把标准输出的结果保存到指定的文件,而且会覆盖文件原有的内容
>> 标准输出的结果保存到文件,在原有内容的尾部追加内容,不会覆盖原有的内容
标准错误输出:2>  2>>  标准错误输出的结果保存到指定文件。
混合输出:&>  &>> 既可以保存标准输出,也可以保存标准错误输出
重定向输入:<  从指定的文件获取数据
echo 12345 > test.txt
mkdir dd
passwd --stdin dd < test.txt
#更改用户dd的密码
#passwd:所有的身份验证令牌已经成功更新

二、变量的作用和类型,如何声明变量

1、变量的作用

用来存放系统和用户需要使用的设定的参数(值),变量保存在内存中,调用的时候,直接到内存中查找变量所在的内存地址。

2、变量的类型

2.1 自定义变量

名称由用户自己定义,值也可以自己定义

变量名的规范:
1、不要使用系统的命令作为变量名
2、不要使用中文
3、不要使用特殊符号开头,可以用下划线开头,不要使用数字开头
4、变量名一般会使用对应的英文名称来使用
5、变量要保持前后一致,要有注释,提高代码的可读性           
变量值:
int:整数型
string:字符串类型,需要用双引号或者单引号引起来,最好双引号避免出现歧义。
浮点类型:0.1.2.3.4.5
布尔类型:true false
# vim test.sh
  a=1             
  b=2
  c=$(($a+$b))    c=$((a+b))  c=$[a+b]  c=$[$a+$b]
  echo $c  3    

打印变量或者引用变量前面加$

双引号,单引号,反撇号之间的区别:
#弱引用和强引用
#双引号,就是弱引用,表示变量值就是变量值本身
#单引号,就是强引用,变量值不在是自身定义的值,而保持自身的字符串形式
#反撇号,命令替换,把命令的执行结果传给变量,作为变量的值,先执行命令,再给变量赋值
a="test"              a='test'          a=`ls /opt`
echo "$a"             echo '$a'         echo "$a"
打印结果test           打印结果$a        打印结果/opt下目录

自定义输入变量的值

read -p "提示信息:" a
read -p "数字b:" b
#-p 指定提示符,提示符的内容包含在""之间,""可以为空,但是必须要有""
vim test.sh
read -p "第一个数" a
read -p "第二个数" b
c=$(($a+$b))
echo $c
sh test.sh
#命令行输入a和b的值,即可得出a+b的值

自定义变量的另一种方式

vim test.sh
c=$(($a+$b))
echo $c
wq
命令行:
export a=1
export b=2
sh test.sh 生效

2.2 全局变量

对整个系统生效,所有用户都可以使用

——全局生效,每个脚本的变量值,固定的。

特点:持久性、共享性

全局变量适用于不需要经常更改的值

排错的方法:

bash -x 脚本名
# 会把每一步都打印出来,这样方便定位哪一步有问题
全局生效举例:
vim test.sh
c=$(($a+$b))
echo $c
vim /etc/profile 
#最后一行插入export a=2   export b=3
source /etc/profiles
sh test.sh

2.3 环境变量

环境变量是系统创建的,用来设置用户的工作环境。

——可以理解为特殊的全局变量,/etc/profile配置文件

查看所有环境变量:env
echo $USER 显示用户的名称
echo $HOME 显示用户家目录名称
echo $PWD  显示当前所在工作目录
echo $PATH 可执行的命令,或者可执行的程序的默认路径
# /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

2.4 位置变量

又称命令行参数,是在脚本的外面给脚本内部传值

$1 $2 $3 $4…$9从第一个到第九个

10以后要用{}把数字括起来${10} ${11}…

vim test.sh
a=$1
b=$2
c=$(($a+$b))
echo $c
sh test.sh 99 100  外部传参
打印结果为199

2.5 预定义变量

编程语言和解释器提供的,用户无法更改,只能由系统自行更新和设置

$*和$@:表示命令或者脚本需要处理的参数。二者的区别在于处理方式不一样

总结:两者不加引号表现一致,都是把参数一个一个处理,$*加了引号,会把参数当成一个整体来进行处理

$# 也是一个全局变量,统计传递给脚本或者函数的参数个数

$? true false 命令执行之后返回的状态码,只有0表示成功,非0都表示失败,返回上一次执行命令的状态

vim test.sh
function print_args {
for arg in "$*"
do
echo "$arg"
done
echo "$#传递了几个"
}
print_args "hello" "world" "!"
sh test.sh
#hello word !当成整体来处理
#3 传递了三次
vim test.sh
read -p "" a
read -p "" b
if [ $a -eq $b ]
then
echo $?
else
echo $?
fi
sh test.sh
输入6 6 0
输入6 7 1

3、shell脚本运算符

# + - * / %取余  只能是整数运行
# 小数运算:bc是一个简易的系统自带的计算机程序,可以执行整数,也可以计算小数
read -p "输入第一个数" a
read -p "输入第二个数" b
除c=$(($a/$b))
加c=$(exper $a + $b)
乘c=$(exper $a \* $b)
乘let c=$a*$b
小数运算c=$(echo "$a+$b"|bc)
echo $c
#awk也是小数运算,不能在脚本里写,在脚本中不可以传参,只能在命令行中写
awk 'BEGIN{print 4.5*3.6}'
16.2
i++  先赋值,再加1
++i 先加1,再赋值
i--
--i
如:
i++                            
for i=1 i<=10 
1
i=1 i+1=2                      
i=2 2+1=3
......
++i
1+0=1 i=1
1+1=2 i=2
......
  • 12
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值