SHELL脚本初识

SHELL概述

Shell Script ,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。

Shell脚本应用场景

重复性操作
交互性任务
批量处理
监控服务的运行状态
定时任务执行

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

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

Shell脚本的初次编写

创建shell脚本

使用 vim 文本编辑器
输入的每一行 Linux命令,会由上到下一次开始

[root@localhost ~]# vim jiaoben.sh
#! /bin/bash             //开头声明环境
cd /mnt
touch shiyan
ls
pwd
ls -lh shi*
~         
:wq     

脚本执行

脚本执行有三种方法
方法一:sh 脚本文件路径

[root@localhost /]# mkdir wenjianjia
[root@localhost /]# mv jiaoben.sh /wenjianjia/
[root@localhost /]# sh /wenjianjia/jiaoben.sh 
shiyan
/mnt
-rw-r--r--. 1 root root 0 7月  15 19:03 shiyan
[root@localhost /]# 

方法二:source 脚本文件路径

[root@localhost /]# source /wenjianjia/jiaoben.sh 
shiyan
/mnt
-rw-r--r--. 1 root root 0 7月  15 19:05 shiyan
[root@localhost mnt]#                ///可以看到这种方法执行后,会切换到脚本内切换的目录,这是细节!切记!!!

方法三:直接输入脚本的文件路径

[root@localhost /]# /wenjianjia/jiaoben.sh
-bash: /wenjianjia/jiaoben.sh: 权限不够   ///可以发现这种方法是不能直接执行的,需要基于X权限
[root@localhost /]# chmod +x /wenjianjia/jiaoben.sh 
[root@localhost /]# /wenjianjia/jiaoben.sh 
shiyan
/mnt
-rw-r--r--. 1 root root 0 7月  15 19:08 shiyan
[root@localhost /]#     ///执行后不切文件夹

完善脚本

脚本编写有些时候会发送给别人使用,这时候有一些语句别人看的时候可能会有些疑惑,就可以添加注释语句

[root@localhost /]# vim wenjianjia/jiaoben.sh 
#! /bin/bash
echo "切换到 /mnt 目录"
cd /mnt
echo "创建新文件 shiyan"
touch shiyan
echo "查看当前内容"
ls
echo "当前所在位置"
pwd
echo "以人性化的方式列出 shi开头的文件"
ls -lh shi*

接下来再次执行该脚本文件
在这里插入图片描述注:" "内输入字符串

交互式硬件设备

标准输入:从该设备接收用户输入的数据
标准输出:通过该设备向用户输出数据
标准错误:通过该设备报告执行出错信息
在这里插入图片描述

重定向符号

在这里插入图片描述来吧!举例!

符号

[root@localhost mnt]# cd /wenjianjia/
[root@localhost wenjianjia]# touch 1
[root@localhost wenjianjia]# echo "这里是内容" > 1
[root@localhost wenjianjia]# cat 1
这里是内容
[root@localhost wenjianjia]# echo "zhelisineirong" > 1
[root@localhost wenjianjia]# cat 1
zhelisineirong

会发现这里第二次输入的内容直接覆盖了原来的内容

>> 符号

[root@localhost wenjianjia]# echo "增加的内容" >> 1
[root@localhost wenjianjia]# cat 1
zhelisineirong
增加的内容

2> 符号

[root@localhost wenjianjia]# touch 4
[root@localhost wenjianjia]# cat 3 2> 4      ///没有创建文件3
[root@localhost wenjianjia]# cat 4
cat: 3: 没有那个文件或目录

别的你们自己试试吧!!!

管道符号 |

进行 | 左边的命令 ,|右边进行二次处理在输出

[root@localhost wenjianjia]# cat /etc/passwd | grep "root"
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost wenjianjia]# 

变量

变量的作用

用来存放系统和用户需使用的特定值
变量名:固定名称,由系统预设或者用户自定义
变量值:根据特定用户设置或者根据系统变化而变化
注:变量值存放在内存中(内存条!),所以重启就没了
系统预设的变量不能修改
不变的量叫常量

变量的类型

自定义变量:由用户自定义,修改和使用
特殊变量:环境变量、只读变量、位置变量、预定义变量

定义一个新变量

变量名以字母或者下划线开头,区分大小写,建议统一大小写,以免记错了!
查看变量值,输入 echo $变量名

[root@localhost /]# blm=80
[root@localhost /]# echo $blm
80

注:
变量数据类型
数值
整形 int 4字节 例如:0 1 10 1001
浮点型 float 单精度付点 4字节
Double 双精度浮点 8字节
例如: 10.1 3.14 10.0 有小数点就是浮点型
非数值
字符 char 1字节或2字节 英文一个字节 中文两个字节 字符集问题 支持文 UTF-8
‘a’ ’z‘ 一个字符 ’男‘ ’女‘ 也是一个字符 JAVA语言中的 字母 占两字节
空格也算字符
字符串 字符的集合 无固定长度 在语言中一般使用 “” 字符串的处理规则 正则表达式 处理字符规则
布尔 true成立 false不成立 判断条件成立与否 流程控制语句 条件语句 循环语句
枚举 限定值的范围 颜色 枚举不可以取小数点

变量赋值时的引号

双引号:允许通过 $ 符号引用其他变量值

[root@localhost /]# aaa="wb $blm"
[root@localhost /]# echo $aaa
wb 80

单引号:禁止引用其他变量值

[root@localhost /]# bbb='$blm'
[root@localhost /]# echo $bbb
$blm

反撇号:在键盘左上角,和波浪按钮是一个键 命令替换,提取命令执行后的输出结果

[root@localhost /]# cat sh
123
[root@localhost /]# ccc=`cat sh`
[root@localhost /]# echo $ccc
123
还有种方法
[root@localhost /]# cat sh2
asdfghjkl
[root@localhost /]# ccc=$(cat sh2)
[root@localhost /]# echo $ccc
asdfghjkl

从键盘输入内容为变量赋值

[root@localhost /]# read -p "输入个内容:" ddd
输入个内容:abcdefg
[root@localhost /]# echo $ddd
abcdefg

设置变量的作用范围

Export 声明全局变量

[root@localhost ~]# aaa=bl234
[root@localhost ~]# bbb=bl345
[root@localhost ~]# export aaa
[root@localhost ~]# bash           //切换bash变量
[root@localhost ~]# echo $aaa
bl234
[root@localhost ~]# echo $bbb

[root@localhost ~]# exit
exit
[root@localhost ~]# echo $bbb
bl345

整数变量的运算

格式:expr 变量一 运算符号 变量二

常用运算符号

加号:+
减号:-
乘号:*
除号:/
取余:%

[root@localhost ~]# expr 1 + 2
3
[root@localhost ~]# expr 1 - 2
-1
[root@localhost ~]# expr 1.1 + 2.2
expr: 非整数参数
[root@localhost ~]# expr 1 \* 5
5
[root@localhost ~]# one=1
[root@localhost ~]# two=2
[root@localhost ~]# five=5
[root@localhost ~]# he=`expr $one + $two`
[root@localhost ~]# echo $he
3
[root@localhost ~]# quyu=`expr $five % $two`
[root@localhost ~]# echo $quyu
1

环境变量

是系统提前创建的,用来设置用户的工作环境
配置文件:/etc/profile ~/.bash_profile

常见预定义变量:

$0:保存当前程序或脚本的名称
$*:保存传递给脚本或进程的所有参数
$$:当前进程给脚本的PID号
$!:后台运行的最后一个进程的PID号
$?:用于返回上一条命令是否成功执行。如果成功执行,将返回数字0,否则返回非零数字(通常情况下都返回数字1)。
$#:用于保存脚本的参数个数

常见的环境变量

PWD PATH
USER SHELL HOME

只读变量

用于变量值不允许被修改的情况

[root@localhost ~]# zd=bng
[root@localhost ~]# readonly zd
[root@localhost ~]# zd=gl
-bash: zd: 只读变量
[root@localhost ~]# unset zd
-bash: unset: zd: 无法反设定: 只读 variable

位置变量

表示为 $n,n为1-9之间的数字


[root@localhost ~]# mkdir jiaoben
[root@localhost ~]# cd jiaoben/
[root@localhost jiaoben]# vim ys.sh
#!/bin/bash
read -p "请输入第一个整数:" a
read -p "请输入第二个整数:" b
he=`expr $a + $b`
echo "两数之和为:$he "
用位置变量可以这么写
[root@localhost jiaoben]# vim wz.sh
#!/bin/bash
sum=`expr $1 + $2`
echo "所得和为$sum"
[root@localhost jiaoben]# source wz.sh 1 2
所得和为3
[root@localhost jiaoben]# source wz.sh 5 4
所得和为9

再来来一个直接点的
[root@localhost jiaoben]# vim zs.sh
#!/bin/bash
echo "所输入数字为:$1 $2 $3 $4 $5"
[root@localhost jiaoben]# source zs.sh 5 6 7 8 9
所输入数字为:5 6 7 8 9

敲着玩的
[root@localhost jiaoben]# vim zj.sh
#!/bin/bash
read -p "请输入第一个数字:" a
read -p "请输入第二个数字:" b
read -p "请输入第三个数字:" c
jiafa=`expr $a + $b + $c`
ji=`expr $a \* $b \* $c`
echo "所输入的三个数字为:$a $b $c"
echo "所得之和为:$jiafa"
echo "所得的积为:$ji"
echo "所得之和答案: " `expr $a + $b + $c`

猜你喜欢

转载自blog.csdn.net/Ora_G/article/details/107367960