Shell第一章——Shell编程规范与变量

 什么是shell?

shell是把人的语言转换成计算机的二进制语言交给计算机的内核处理

shell在中间作为解释器,翻译的功能

linux系统的shell种类:bash,tcsh,csh

bash:linux默认的shell

tcsh:整合了csh的功能,提供了比csh更多更强大的功能

nologin:禁止用户登录,也是shell的一种形式

cat /etc/shells:查看能用哪些shell

cat /etc/passwd:查看用户使用的shell

除非指定,默认的shell都是bash。

什么是脚本,为什么叫脚本语言

脚本:扩建语言,动态语言,也是一种编程语言,控制软件应用程序

脚本都是以文本形式保存,只在调用时才会进行解释或者编译

脚本语言按行执行,执行文档当中的特定命令。

shell脚本地构成

第一类:开头  注明解释器, #!/bin/bash     #!/usr/bin/paython

第二类:执行语句,都是系统支持地命令格式,只要系统能够执行地语句,包括第三方扩展命令,都可以作为执行语句。

第三类:注释语句   #:作为注释,注释的代码,不会被执行

默认的脚本格式名称:...sh    以 .sh作为文件后缀名

脚本执行的三种方式:不需要赋予执行权限就能执行sh和source

source:点命令,也就是一个符号“ . ”   是bash自带的内部命令,读取文件当中的可执行命令

然后会加载到shell中(切换到目标目录),不用重启直接生效

赋权执行:执行权限 chmod+x  ,chmod  777

相对路径执行:“ ./ ”  " . "  表示当前目录

绝对路径执行:“ / ”   例:/opt/first.sh

这两种方式都必须要有执行权限,这是生产当中的执行方式。

工作当中都是赋权执行,sh和source只限于调试阶段,都是以绝对路径了执行的

例:crontab  -e

   * * 1 * * /opt/first.sh

source  first.sh           定时任务和脚本配合在一起使用

重定向与管道符

管道符:“ | ” 把前面的命令作为后面命令的操作对象

重定向操作:

重定向输出 >  把指定结果保存到文件中,覆盖原有的内容

例:echo  123  >  456             ls查看可以直接看到456,cat  456才可以看到123    123组为输入,输入进456当中

重定向输入:<,从指定文件读取数据,也可以理解为免交互

passwd  - -  stdin  dn  <  123  把123中的文本作为密码重定向输入,修改

一定要关闭安全机制  setenforce  0

重定向输出>> 会在当前内容的尾部追加,不覆盖原有的内容

重定向错误输出2> 将错误信息保存到指定文件,也会覆盖原有内容(用的少)

 2>>  将错误信息保存到指定文件,不会覆盖

混合输出&> 将标准和错误都保存在文件中,他会覆盖原有内容·

shell变量的作用类型:

变量可以改变,有类型和范围,变量需要有范围和类型,用户指定变量(自定义变量)

想干什么,就定义出想干的事情到底是什么  如加法,减法,还有数字

自定义变量:用户指定需要的参数

变量的类型:int:整数  string :字符串  布尔:true或false    浮点:小数

变量名:固定名称、用户自定义、系统预设

用户自定义变量名要求:

1、不要使用linux系统的操作命令或者系统命令来指定变量名

2、不要用中文作为变量名

3、不能使用特殊字符开头,下划线 _ 除外

4、默认原则,最后使用·名称为英文来指定变量名

5、注释,注释的目的是作为解释代码用途

怎么定义变量(写一个变量)

变量名=变量值       变量名是区分大小的   aa=test   AA=test1

查看变量的值:echo $变量名      如:echo  $aa   

或 echo  $AA$aa →更好的表达方式    echo  ${AA}${aa}

例:

只读变量:1、不能重新赋值     2、只读变量不能删除

例:

Shell第一章——Shell编程规范与变量_第1张图片

 

 

赋值时,引号的作用,三种引号  

1、反撇号 `(在键盘上和~在一起)

反撇号的作用:命令替换,把命令执行的结果赋值给变量名

例:

a=`ps  aux  |  grep  root`

echo  $a

2、双引号  “ ” 

双引号的作用:弱引用,打印变量的赋值

例:echo  "$a"

3、单引号 ‘ ’

单引号的作用:强引用,用单引号打印变量名只会输出变量名,不会输出变量的值

例:echo  '$a'  打印出来的就是$a,不会打印出变量的值

总结:单引号和双引号只有打印时有区别,在赋值时没有区别

read命令来获取变量:

read  -p:指定提示符,提示用户输入数据

例:

 

 

 a,b是给变量起的变量名,一定要有否则会报错

变量的作用范围:默认情况下新定义的变量只能在当前的shell中生效,也可以叫局部变量

全局变量:在程序和脚本中以及全部的shell环境中都可以被引用

export:声明全局变量,零时声明

缺点:一旦有重命名就会非常麻烦,可能会导致未知的错误而且难以寻找

永久声明要写在配置文件中

自定义变量结束,下面来到环境变量

环境变量:系统提前创建好的,或者人工添加的,用来设置用户的工作环境,配置系统行为,传递信息,控制程序执行。

系统环境变量:echo  $PATH(所有系统环境变量的路径)  所有人都可见,可用

用户环境变量:只能对当前用户开放使用   echo  $HOME  用户的宿主目录

$USER:表示用户名称      $PWD:表示当前所在目录    $PATH:可执行程序的默认路径

位置变量:也叫命令行参数,脚本运行时,从外部传递变量值,让脚本来运行,可用根据需求来进行处理

$n:n表示的数字 1,2,3,4,5,6,7,8,9  10及以上的参数要用{ }来表示 

 同时也有$0:表示整个命令本身  如sh  wz.sh

例:

 Shell第一章——Shell编程规范与变量_第2张图片

 

 即$1=10 $2=20   从左往右依次赋值,要在脚本执行时,在外部传入变量值

预定义变量:编程语言或者脚本语言解释器来提供的,可以自动设置,可以更新的,但是由编程语言或者脚本解释器自动完成的,人工不能修改。

$* , $@:表示命令和脚本需要处理的参数

$*:加双引号时会把参数当成一个整体来处理

不加双引号会把参数分开处理,在打印体现在参数是否在一行

$@:加不加双引号都会把参数分开处理

$#和$? :

$#:统计传递给脚本的参数的个数

例:

 

 

 

$?:表示一条命令或者脚本来执行后的一个返回码,返回码为0则表示执行正确,不为0则是执行不正确

并且$?只能返回最近的一次命令或者脚本执行的返回码

整体运算:i=$(($a+$b))  或 特殊的 i=$((10+15)) 

几种运算符   +  -  /  *  %(表示取余数)如 i=$((6%4))  echo  $i  得到2  6除4余2

expr   expr:  i=$(expr  12\*5)

                        echo  $i

Shell第一章——Shell编程规范与变量_第3张图片

 引用变量前一定要加$

i++ i=$(($i+1)) 先赋值,再加 i=1 i=1+1 i=2+1 每次自加1
i-- 每次自减1 先赋值再减
i+=2 每次自加2 先赋值,再加2
++i 先加再赋值,自加1
--i 先减再赋值,自减1

bc:简易的计算器,可以支持运算,也可以进行小数运算

例:

 

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