Shell是翻译官,是在计算机与用户之间。它将代码翻译为人类可读懂的语言,反之将人类的语言翻译为计算机的二进制语言,这就是Shell。
bash:Linux默认的shell
tcsh:整合了csh的功能,提供比csh更强大的功能
csh:类似于C语言的shell
nologin:是shell一种类型,表示禁止用户登录
查看系统自带的shell:
[root@localhost gsn]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
是一种扩建的语言、动态语言、也是一种编程的语言。
用来控制软件及应用程序,脚本都是以文本形式来保存的。执行文本当中输入的命令就是脚本。
第一类:开头注明解释的区域如 —— #!/bin/bashs #!/usr/bin/python等
默认就是:/bin/bash 的情况下,开头可不写
第二类:执行语句。语句都是Linux系统所支持的命令语句,包含第三方扩展命令,都可以作为脚 本的执行语句
第三类:# 是注释的符号,在语句前面注释上的符号,则不被执行。
sh:后面直接接上文本即可执行
source:点命令,也是一个符号。点是bash的内部命令自带的,读取文件当中可执行的命令,会加载到shell当中,不用重启直接生效,需赋权执行。
./ :在当前目录执行,相对路径形式,需赋予执行权限
/ :绝对路径,需赋予执行权限
输出:“>”表示把指定结果保存在文件夹中,覆盖原有内容。
输入:“<”表示从指定文件中获取密码、免交互形式
输出:“>>”表示在当前内容的尾部追加,不覆盖原有内容
重定向错误输出:“2>”表示只保存错误信息到指定文件中,并且会覆盖原有内容。
混合输出:"&>"表示标准和错误都将保存在指定文件中,并且会覆盖原有内容。
变量是可以改变的类型和范围,变量要有一个范围和类型。
变量的类型:int整数、string字符串、true&false布尔运算、小数 浮点
变量名称:固定名称、系统预设、自定义名称
接下来着重讨论自定义名称
自定义变量名称原则在于:不能使用系统的一下命令来取名、不用中文、特殊字符符号来指定名称;最好使用英文来指定变量名;在文本当中每一行语句最好要有注释,目的在于方便他人理解该代码的具体解释。
首先定义变量的值,给它赋予一个值。如:a=90
接着 “echo” 打印出变量的值并查看。
[root@localhost gsn]# a=90
[root@localhost gsn]# echo $a
90
删除值的命令:unset a
不过只读变量的不能通过此删除、修改
赋值时最好给值加上引号,不同的符号作用也不一样。如下:
反撇号 `` :命令执行的结果,赋值给变量名、命令的替换
a=`ps aux | grep root`
echo $a
单引号 ' ':强引用,单引号只打印变量名,不打印变量值
[root@localhost gsn]# echo '$a'
$a
双引号 " ":弱引用,用来打印出变量的值
[root@localhost gsn]# echo "$a"
90
read命令获取变量值
-p:表示指定提示符,提示用户输入数据
作用在于无需每次给文本进行编辑变量值,利用此命令即可动态修改想要的值,操作如下:
[root@localhost opt]# vim 123
read -p "第一个数制" a
read -p "第二个数制" b
c=$(($a+$b))
echo $c
[root@localhost opt]# source 123
第一个数制 7
第二个数制 9
16
变量的作用范围:默认情况下新定义的变量只能在当前的shell中才能生效,也可以叫做局部变量,export用来临时声明。
接下来便由此引出了全局变量:
在程序和脚本中以及全部的shell环境中都可以被引用;但是如有重名,便会比较麻烦去修改调试。
export只是临时永久声明全局的变量
那么全局配置的文件路径是:
/etc/profile —— 针对所有用户
只对root用户生效的全局:
/root/.bashrc_profile
/root/.bashrc
注:全局变量编辑后需要source更新一下
以上都是在自定义变量的范畴内
环境变量:是系统提前创建好的,或者人工添加的,用来设置用户的工作环境,配置系统行为,传递信息,控制程序执行。
系统环境变量:echo $PATH:所有系统环境变量的路径。是所有人都可见,都可用的(Tab键可补齐)。
[root@localhost /]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
$HOME :用户的宿主目录
$USER:表示用户名称
$PWD:表示当前所在目录
$PATH:可执行程序的默认路径
位置变量:也叫命令行参数,脚本运行时,从外部传递变量值,让脚本来运行,可用根据需求来进行处理。
$n:n表示的数字 1,2,3,4,5,6,7,8,9 10及以上的参数要加上{ }大括号。
[root@localhost opt]# vim sss.sh
num1=$1
num2=$2
sum=$(($num1+$num2))
echo $sum
[root@localhost opt]# sh sss.sh 100 200
300
注:$0表示命令本身,$1$2表示从左往右赋值,脚本执行时从外部传变量值。
预定义变量:编程语言或者脚本语言解释器来提供的,可以自动设置,可以更新的,但是由编程语言或者脚本解释器自动完成的,人工不能修改。
$*:加双引号时会把参数当成一个整体来处理,不加引号则分别处理
$@:加与不加双引号都会把参数分开处理
$* 和 $@:都表示命令和脚本需要处理的参数
$#:统计传递给脚本的参数的个数
$?:表示一条命令或者脚本来执行后的一个返回码,返回码为0则表示执行正确,不为0则是执行不正确;并且 $? 只能返回最近的一次命令或者脚本执行的返回码。
整数运算包含 “加+、减—、乘*、除/、取余%” 五个运算法则
a=$((20+30))
a=$((30-20))
a=$(expr 12 \ *5)
a=$((30/20))
a=$((30%20))
i++: i=$(($i+1)) 先赋值,再相加(i=1 i=1+1 i=2+1 每次自加1)
i-- :每次自减1,先赋值再相减
i+=2:每次自加2,先赋值,再加2
++i:先加再赋值,自加1
--i:先减再赋值,自减1
简易的计算器、支持小数计算
如下:
[root@localhost opt]# echo 3.1415926+2.33 | bc
5.4715926