shell脚本--基础版本

一、shell脚本

脚本就是可以运行的代码的集合,脚本语言(计算机语言)
**脚本的特点:**从上到下,按行执行。

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

shell脚本就是在shell环境(/bin/bash)bash就是shell的解释器。Linux环境下的编程语句。
学习shell脚本的原因自动化运维。可以重复执行的,自动化的在系统中实现增删改查的操作。
shell的解释器,默认就是bash
sh:已经淘汰
bash: sh的扩展版本
csh : 类C语言的
tcsh : 整合了C语言的shell
nologin :用户无法登录到系统的shell

shell的作用:

1、自动化运维
2、批量化的重复操作,以及配合定时任务执行
3、有了脚本就可以减轻管理员的工作量
4、避免配置出错
5、提高处理批量文件的速度

shell脚本的构成:

第一行:声明解释器(默认bash,可以不写)
注释:#开头,注释的信息,注释不执行
可执行语句:Linux命令都可以作为可执行语句,按照行依次往下执行,一行一个可执行语句

shell执行方式:

第一种:

不给脚本执行权限的执行放方式
**sh:**就在当前的shell里生产一个子shell,允许的结果不改变父shell的环境,只是演示。
**source:**点命令 . 会改变当前shell的环境,也就是真正的执行代码。改变环境
**bash:**就在当前的shell里生产一个子shell,允许的结果不改变父shell的环境。只是演示

调试使用:bash sh

第二种:

脚本调试完毕,都是赋权执行
chmod 777 shell脚本文件名称
当前目录 ./ 非当前目录绝对路径 /opt/test.sh

crontab -e 定时任务

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

二、重定向操作:

标准输入:正确的命令输入
标准输出:正确的命令输入之后正确的输出
标准错误输出:错误的命令输入返回输入错误的提示
重定向类型:
**重定向输出:**1、> (只能把标准输出的结果保存到指定文件,会覆盖原有的文件内容)/
2、>> 标准输出的结果保存到文件,不会覆盖原有内容
2> 2>> 标准错误输出的结果,保存到指定的文件
混合输出保存 &> &>> 混合输出保存,既可以保存标准输出,也可以保存标准错误输出

重定向输入:< 从指定文件获取数据。

三、变量

(1)变量的作用:

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

(2)变量的类型:

**自定义变量:**名称由用户自己定义,值也可以自定义。
变量名的规范:
1、不要使用系统的命令作为变量名
2、不要使用中文名称
3、不要使用特殊符号开头,可以下划线开头
4、不使用数字开头
5、变量名一般使用对应的英文名称来使用
6、变量要保持前后一致,要有注释。提高代码可读性。
变量值:int 整数类型 string 字符串(双引号引起来) 浮点:0.12 布尔:true false
声明的字符串用 " " 引起来

全局变量

对整个系统生效,所有用户都可以使用
全局生效,每个脚本的变量值,固定的。
持久性
共享性
全局变量适用于不需要经常更改的值
排错方法:bash -n shell脚本名 查看语法是否错误
bash -x shell脚本名 脚本运行的每一步都会进行打印,方便定位哪一步的问题。

环境变量:

环境变量是系统创建的,用来设置用户的工作环境
环境变量可以理解为特殊的全局变量,/etc/profile配置文件

[root@test2 opt]# echo $PATH 
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
可执行的命令,或者可执行的程序的默认路径

[root@test2 ~]# PATh="$PATH:/root"
[root@test2 ~]# echo $PATH
位置变量:

又叫命令行参数,是在脚本的外面给脚本的内部传值。
$1 $2 $3 $4 $5 $6 $7 $8 $9 从第一个到第九个
10以后要用()把数字括起来
$(10)

[root@test2 opt]# vim test1.sh 
a=$1
b=$2
c=$(($a+$b))        # c=$[$a+$b]   +  -  *   /   %
echo $c
[root@test2 opt]# sh test1.sh 11 12
23
预定义变量:

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

$ @ : ∗ ∗ 表示命令或者脚本要处理的参数。 ∗ ∗ 两者区别 ∗ ∗ :处理方式不同 ∗ ∗ 总结: @:**表示命令或者脚本要处理的参数。**两者区别**:处理方式不同 **总结: @表示命令或者脚本要处理的参数。两者区别:处理方式不同总结: @ ∗ ∗ 不加引号表现一致,都把参数一个一个处理 ∗ ∗ @**不加引号表现一致,都把参数一个一个处理 ** @不加引号表现一致,都把参数一个一个处理***加了引号,会把参数当成一个集体处理
KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲** 也是一个全局变量,统计传…? true false 命令执行之后返回的状态码 只有0表示成功,所有非0都表示失败,返回上一次执行命令的状态码

"$*"   $*   "$@"  $@   区别
[root@test2 opt]# cat qqq.sh 
function print_args {

for arg in "$*"                # "$*" 把所有的参数当做一个整体处理   
do                                         $*  不加引号,所有参数一个一个处理
 echo "$arg"                               $@、"$@"  结果与  $@结果一致
done
}
print_args "hello" "world" "!"
[root@test2 opt]# sh qqq.sh                [root@test2 opt]# sh qqq.sh 
hello world !                               hello
                                            world     
                                            !
     $#   用法
[root@test2  opt]# cat qqq.sh 
function print_args {

for arg in "$*"
do
 echo "$arg"
done
echo "传输了$#个"
}
print_args "hello" "world" "!"
[root@test2 opt]# sh qqq.sh 
hello world !
传输了3个
   $? 用法
[root@test2 opt]# cat  eee.sh
read -p "输入第一个数字" a
read -p "输入第二个数字" b
if [ $a -eq $b ]
then
echo $?
else 
echo $?
fi
[root@test2 opt]# sh eee.sh 
输入第一个数字11
输入第二个数字11
0
运算的不同表示方法
[root@test2 opt]# cat www.sh 
#!/bin/bash
read -p "输入第一个数" a
read -p "输入第二个数" b
# c=$(($a%$b))       取余
# c=$(($a/$b))       相除   
# c=$(expr $a+$b)    相加
# c=$(expr $a \* $b) 相乘
# let c=$a*$b        相乘
c=$(($a/$b))
echo $c
小数运算:
[root@test2 opt]# cat sss.sh
read -p "第一个数字:" a
read -p "第二个数字:" b
# + - * / % 取余,只能是整数运行。
#小数运算:bc是一个简易的系统自带的计算机程序,可以执行整数,也可以计算小数
c=$(echo "$a+$b" |bc )
echo $c
[root@test2 opt]# sh sss.sh 
第一个数字:10.1
第二个数字:11.2
21.3
单引号,双引号,反撇号` 的区别:
单引号
[root@test2 opt]# cat test1.sh 
a='tstr'
echo '$a'
[root@test2 opt]# sh test1.sh 
$a
双引号
[root@test2 opt]# cat  test1.sh
a="tstr"
echo "$a"
[root@test2 opt]# sh test1.sh 
tstr

双引号,就是弱引用,变量值就是变量值本身
单引号,强引用,变量值不再是本身定义的值,保持自身的字符串形式
**反撇号,**命令替换,把命令的执行结果传送给变量,作为变量的值,先执行命令,再给变量赋值。

如何自定义输入变量的值?

read -p   "提示信息:"  变量的名称
read -p   "数字b:" b
c=$(($a+$b))
echo $c

read
-p 指定提示符,提示符的内容包含在 " " 之间," "可以为空,但是双引号必须要有。

修改配置文件/etc/profile文件中 export a=5 export b=6 sh test1.sh (永久生效)

全局变量的使用方法
[root@test2 opt]# vim /etc/profile
export a=5
export b=6
"/etc/profile" 79L, 1995C      
[root@test2 opt]# sh test1.sh 
11
赋值问题?

i++ 先赋值,再加1

++i 先加1 ,再赋值

i- - 先赋值,再-1

– i 先 - 1 ,再赋值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

代码要你命

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

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

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

打赏作者

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

抵扣说明:

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

余额充值