shell编程规范与变量

目录

一、shell的作用和规范

1.shell的作用

2.shell的执行顺序

3.shell的格式

4.执行shell脚本

1.直接调用shell解释器加上脚本的名字

2.路径加脚本名          绝对路径或相对路径        脚本文件需要有执行权限

3.直接运行

4.其他执行

5.执行环境

二、脚本的错误方式和检查语句

1.命令错误

2.语法错误

3.逻辑错误

4.检查语句

三、重定向与shell脚本变量

1.重定向

2.shell变量

1.变量

2.变量的类型

3.命名要求

4.特殊符号

5.预定义变量(详解)

四、脚本语句

1.read -p     从键盘输入的内容变成变量

2.变量作用范围

3.整数的运算

4.管道符

5.随机数生成器变量

6.编写脚本

总结:本章主要介绍shell脚本的基础知识以及部分基础脚本


一、shell的作用和规范

1.shell的作用

将高级语言翻译成二进制,也可以将二进制翻译成高级语言

写一个命令集合,用bash(shell)去翻译给硬件执行

2.shell的执行顺序

1.顺序执行

2.选择执行

3.循环执行

3.shell的格式

1.#!/bin/bash               代表声明解释器,使用什么解释器(shell)

2.注释信息:以#开头的代表注释信息

3.可执行语句

4.执行shell脚本
1.直接调用shell解释器加上脚本的名字

bash [脚本名]                             不需要脚本文件有执行权限

2.路径加脚本名          绝对路径或相对路径        脚本文件需要有执行权限

./ [脚本名]

3.直接运行

直接运行需要加入到$PATH中(全局运行和补全)

4.其他执行

source和.也可以执行

5.执行环境

source 和 . 执行脚本会改变当前环境(进程)

bash 和 ./ 不会改变当前环境会生成一个新环境(进程)

 6.查看本机的shell信息

cat /etc/shells

shell编程规范与变量_第1张图片

二、脚本的错误方式和检查语句

1.命令错误

不会影响接下来的命令执行,但本条命令不执行

2.语法错误

直接影响脚本无法正常运行

3.逻辑错误

可以正常运行但最终结果不是本来的结果

4.检查语句

bash -x [脚本文件名]         执行脚本并排查错误

bash -n [脚本文件名]         检查语法错误但行数不一定准确

set -e 一旦出错立即停止   用法:写入脚本文件中

set -u 变量不存在不执行   用法:写入脚本文件中

三、重定向与shell脚本变量

1.重定向

重定向就是改变电脑数据的输出方向

电脑的默认输出方向是屏幕

写入指令让电脑执行,电脑打印结果在屏幕上,称为标准输出如果电脑未打印出正确的结果称为错误输出

通过键盘,鼠标,扫描仪,话筒,等设备输入给电脑的指令称为标准输入

改变输出方向

1.输出到别的终端上

先使用 tty 命令查看终端信息

再使用 ls > /dev/pts/0

shell编程规范与变量_第2张图片

2.输入到文件中

ls > test 

shell编程规范与变量_第3张图片

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

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

                        >>       将输出结果追加到指定的文件尾部

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

                        2>>     将错误信息追加到指定的文件中

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

2.shell变量
1.变量

变量:值可以变化

常量:值不可以变化

shell不分数据类型,所有的数据类型都是字符串

设置变量

变量名=变量值           两边没有空格

调用变量

echo $变量名

删除变量

unset 变量名

重新定义变量

变量名=变量值

追加变量值

变量名+=变量值

2.变量的类型

1自定义的变量

2预定义变量($?,$$,$*,$@这些是shell中自带的)

3环境变量(env可以看到所有的环境变量)

4只读变量(只可以读不可以改)

变量值不允许修改(重新赋值)的情况

无法使用unset删除

最快方法重启

name=zf15

readonly name

echo $name

unset name

echo $name 

 name=zf

shell编程规范与变量_第4张图片

5位置变量($1...$n)

位置变量也称为位置参数,使用$1、$2、$3、…、$9 表示

vim 1.sh 

#!/bin/bash
echo "$1"            位置1
echo "$2"            位置2
echo "${10}"         位置10
echo "$10"           位置1和0
echo "$*"            将所有项当成一个值
echo "$@"            所有项
echo "$0"            脚本自身
echo "$#"            后面参数的个数

./1.sh {1..10}

shell编程规范与变量_第5张图片

shell编程规范与变量_第6张图片

3.命名要求

1区分大小写

2不能使用程序中的保留字和内置变量

3只能用字母,数字及下划线且不能以数字开头,不支持短横线"-"

4不要使用内置的变量,使用英文尽量使用词义

5大驼峰 StudentFirstName

6小驼峰 studentFirstName

7下划线 student_name

4.特殊符号

${}       定义变量名的范围

" "        变量在双引号中可以识别(弱引用)

' '         变量在单引号中不被识别(强引用)

` `         反撇号代表引用命令执行的结果效果等于$()

5.预定义变量(详解)

$?    代表上一次命令的执行结果为0代表正确,非0代表错误

$0    代表脚本的文件名    如 bash $0 代表再执行一次本脚本如果写入脚本就会一直执行无限循环

$$    代表当前bash的pid号

$#    代表位置参数的总个数

$*     代表返回所有参数并且所有参数当成一个整体返回

$@   代表返回所有参数并且所有参数是独立的个体返回

四、脚本语句

1.read -p     从键盘输入的内容变成变量

read -p "现在的时间是:"  time

echo $time

shell编程规范与变量_第7张图片

 vim 1.sh

#!/bin/bash
echo -n "请输入你的姓名:"
read info
echo 你的姓名是:$info

bash 1.sh 

shell编程规范与变量_第8张图片

2.变量作用范围

默认情况下,新定义的变量只在当前的shell环境中有效,因此称为局部变量,当进入子程序或新的shell环境中,局部变量将无法再起作用

可以通过内部命令export将指定的变量为全局变量,使用户定义的变量在所子shell环境中可以继续使用

格式1:export 变量名

格式2:export 变量名=变量值

可以使用pstree 查看shell的环境

输入bash进入子shell

ctrl+D组合exit 退出子shell

abc=123
echo $abc
bash
echo $abc
exit
echo $abc
export abc=123
bash
echo $abc

shell编程规范与变量_第9张图片

3.整数的运算

expr只能进行整数的运算

格式:  expr  变量1   运算符   变量2

运算符:

加法                  +

减法                  -

乘法                  \*

除法                   /

取余                  %

expr 1+2

expr 1 + 2

a=20

b=30

expr $a + $b

expr $a - $b

expr $a \* $b

expr $b / $a

expr $b % $a

 expr 1 + 2 \* 3 

expr 2 \* $[ 3 + 1 ] 

shell编程规范与变量_第10张图片

a=1

b=2

let c=a+b

echo $c

shell编程规范与变量_第11张图片

i=1

let i++

echo $i

i=1;let i++;echo $i

i=100;let ++i;echo $i

i=100;let j=i++;echo $i $j

i=100;let j=++i;echo $i $j

i++ 是先赋值给j后再加     ++i是加后再赋值

shell编程规范与变量_第12张图片

4.管道符

管道符 |

将左侧的命令输出结果,作为右侧命令的输入(处理对象)可以 叠加使用

ls /opt |wc

grep "/bin/bash$" /etc/passwd

grep "/bin/bash$" /etc/passwd | awk -F: '{print $1,$7}'

shell编程规范与变量_第13张图片

5.随机数生成器变量

$RANDOM  取值范围:0-32767

echo $[RANDOM%34+1]           生成随机数范围在35以内

echo -e "\E[1;30mhello\E[0m"    生成灰色hello

echo -e "\E[1;$[RANDOM%7+31]mhello\E[0m"      生成随机颜色的hello

echo $(expr $RANDOM % 33 + 1)         生成随机数范围在34以内

shell编程规范与变量_第14张图片

6.编写脚本

vim xinxi.sh

#!/bin/bash

echo "请输入你的姓名"

read num1

echo "你的姓名是$num1"

bash xinm.sh

shell编程规范与变量_第15张图片

shell编程规范与变量_第16张图片

chmod +x xinm.sh

./xinm.sh

shell编程规范与变量_第17张图片

vim 3.sh

#!/bin/bash
read -p "请输入第一个整数:" num1
read -p "请输入第二个整数:" num2
sum=`expr $num1 + $num2`
echo "运算结果为:$sum"
bash 3.sh

shell编程规范与变量_第18张图片

shell编程规范与变量_第19张图片

vim system.sh

#!/bin/bash
ip=`ifconfig ens33|grep netmask|tr -s " " |cut -d " " -f3`
cpu=`lscpu |grep 型号名称|cut -d":" -f2|tr -s " "`
mem=`free -h|grep  Mem|tr -s " " |cut -d " " -f2`
disk=`lsblk |grep disk|tr -s " " |cut -d" " -f4`

echo "--------------------- systeminfo----------------------"
echo  "你的ip地址是:  ${ip}                                "
echo  "你的主机名是:  $(hostname)                          "
echo  "你的系统版本是: $(cat /etc/redhat-release)          " 
echo  "你的cpu型号是: $cpu                                 "
echo  "你的内存大小是: $mem                                "
echo  "你的磁盘大小是: $disk                               "
echo "------------------------------------------------------"

bash system.sh

shell编程规范与变量_第20张图片

shell编程规范与变量_第21张图片

总结:本章主要介绍shell脚本的基础知识以及部分基础脚本

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