目录
一,shell的作用
Linux系统中的shell是一个特殊的应用程序,它介于操作系统内核于用户之间,充当一个“命令解释器”的角色,负责接收用户输入的操作指令进行解释,并需要执行的操作传递给内核执行,并输出执行结果。
查看本机的shell信息
Linux中常见的shell
bash:基于gun的框架下发展的shell
csh:类似c语言的shell
tcsh:整合了csh提供了更多功能
sh:已经被bash替换
nologin:这个可以让用户无法登陆
bash(/bin/bash)是目前大多数Linux版本采用的默认shell
二,shell脚本及构成
将命令按顺序--列出,最后自动执行
执行需要权限,可以直接使用绝对路径
脚本其实不复杂,通过脚本环境依然可以使用的脚本
构成:
1,脚本申明(解释器):第一行开头“#!/bin/bash”,表示此行一下的代码语句是通过/bin/bash程序来解释执行。#!/bin/bash为默认的解释器
2,注释信息:以#开头的语句表示为注释信息
3,可执行语句:比如echo命令用于输出“ ”之间的字符串
三,脚本执行逻辑及执行方式
脚本执行逻辑
1,顺序执行 :程序从上到下顺序执行
2,选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行
3,循环执行:程序执行过程中需要重复执行多次某段语句
执行脚本文件
方法一:脚本文件路径(绝对路径与相对路径)必须有x权限
[root@localhost~]#./first.sh
方法二:sh脚本文件路径
[root@localhost~]# sh first.sh
方法三:source脚本文件路径(可以通过“.”来执行)
[root@localhost~]#source first.sh
四,脚本错误
1,一类命令错误命令出错不会影响接下来的命令继续
2,语法错误
3,逻辑错误
查代码的正确
bash -n 脚本名称(不在当前目录下加绝对路径) 检查语法错误
bash -x 脚本名称(不在)
总结:脚本错误常见的有三种区别
1,语法错误,会导致后续的命令不继续执行,可以用bash -n检查错误,提示的出错行数不一定是准确的
2,命令错误,是默认后续的命令还会继续执行,用bash -n无法检查出来,可以使用bash -x进行观察
3,逻辑错误:只能使用bash -x进行
五,重定向与管道操作
(一),交互式硬件设备
标准输入:从该设备接收用户输入的数据
标准输出:通过该设备向用户输出数据
标准错误:通过该设备报告执行出错信息
类型 | 设备文件 | 文件描述编号 | 默认设备 |
标准输入 | /dev/stdin | 0 | 键盘 |
标准输出 | /dev/stdout | 1 | 显示器 |
标准错误输出 | /dev/stderr | 2 | 显示器 |
重定向的意思就是,不通过标准输出到屏幕上,输出到你指定的位置
类型 | 操作符 | 用途 |
重定向出入 | < | 从指定的文件读取数据,而不是从键盘输入 |
重定向输出 | > | 将输出结果保存到指定的文件(覆盖原有内容) |
>> | 将输出结果追加到指定的文件尾部 | |
标准错误输出 | 2> | 将错误信息保存到指定的问(覆盖原有内容) |
2>> | 将错误信息追加到指定的文件中 | |
混合输出 | &> | 将标准输出,标准错误的内容保存到同一个文件中 |
举例:
ls /data /xxx > /data/all.log 2>&1
ls /data /xxx 2> /data/all.log 1>&2
ls /data /xxx &> /data/all.log
ls /data /xxx >& /data/all.log
ls /data /xxx 2>&1> /data/all.log
六,变量
保存将来会变化的数据,及时数据变化,直接调用变量即可,各种shell环境中都使用到了变量的概念,shell变量用来存放系统和用户需要使用的特定参数(值),而且这些参数可以根据用户的设定或系统环境的变化而变化。通过使用变量,shell程序能够提供更加灵活的功能,适应性更强。
6.1基础变量
常见shell变量的类型包括:
1自定义变量:系统用户自定义,修改和使用
2环境变量:系统维护,用于设置工作环境
3只读变量:只可以读取不可以更改
4位置变量:通过命令行给脚本传递参数
5预定义变量:Bash中内置的一类变量,不能知己修改
系统内置变量:PATH,UID,HOSTNAME
6.2命名要求
区分大小写
不能使程序中的保留字和内置变量,如if,for,hostname
能使用数字,字母下划线,并且不能以数字开头,注意,不支持短横杠“-,和主机名相反”
不能使用内置的变量,使用英文尽量使用词义通俗易懂,PATH
大驼峰StudentFirstName
小驼峰studentFirstName
下划线student_name
注:
1,赋值时使用双引号(“”)可以直接调用变量
2,赋值时使用单引号(‘’)$只会被认为是字符$不会调用变量
3,赋值时使用(``)命令替换,提取命令执行后的输出结果$()用法相同
4,{}可以分隔变量值
补充说明:
如果想要输出为结果可以使用echo$
如何查看IP地址:
6.3从键盘输入内容为变量赋值
read [-p "提示信息"] 变量名
举例:
#!/bin/bash
read -p "请输入体重kg:" a
if [ $a -lt 50 ] && [ $a -lt 60 ]
then
echo "微胖"
elif [ $a -lt 50 ] && [ $a -gt 0 ]
then
echo "瘦"
else
echo "胖"
fi
6.4变量的作用范围
(1)默认情况下,新定义的变量只在当前的shell环境中有效,因此称为局部变量,当进入子程序或新的子shell环境时,局部变量将无法在使用
可以使用 pstree 命令查看Shell环境,输入 bash 命令进入子Shell环境。
使用pstree命令查看当前的shell环境
(2)命令格式:
可以通过内部命令export指定变量到处为全局变量,使用户定义变量在所有的子shell环境中能够继续使用
格式1: export 变量名
格式2:export 变量名=变量值
七,整数变量的运算
整数变量的运算:
expr 变量1 运算符 变量2 [运算符 变量3]
常用运算符:
加法运算:+
减法运算:-
乘法运算:\*
除法运算:/
整数取余:%
举例:
八,特殊shell变量
环境变量
由系统提前创建,用于设置用户的工作环境
配置文件:/etc/profile, ~/.bash_profile
常见的环境变量:
使用env命令可以查看单签工作环境下得环境变量
USER表示用户名称
HOME表示用户的宿主目录
LANG表示语言和字符集
PWD表示当前所在的工作目录
PATH表示可执行程序的默认搜索路径
举例:
[root@localhost opt]# #PASH="$PATH:/root"
[root@localhost opt]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
九,位置变量
$#:命令行中位置变量的个数
$*:所有位置变量的内容
$?:上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出错
$0:当前执行的进程/程序名
$*、$@:表示命令或脚本要处理的参数。
$*:把所有参数看成以空格分隔的一个字符串整体,代表"$1 $2 $3 $4"。
$@:把各个参数加上双引号分隔成n份的参数列表,每个参数是独立 的,代表"$1" "$2" "$3" "$4"。
echo "$1" 位置1
echo "$2" 位置2
echo "${10}" 位置10
echo "$10" 位置1和0
echo "$*" 将所有项当成一个值
echo "$@" 所有项
echo "$0" 脚本自身
echo "$#" 后面参数的个数
十,总结
学习了Linux脚本的基础命令,需要熟练掌握,最主要的是需要记住几个变量。