Shell初识(概念,变量)
一、Shell概述
linux内核驱动硬件,外层应用程序,比如LOL之类的想要操作Linux内核,就需要通过shell来控制硬件。如下图
Shell是一个命令行解释器,它能接受应用程序/用户命令,然后调用操作系统内核。也是一个功能相当强大的编程语言,特点是易编写,易调试,灵活性强。
二、感受Shell
在linux操作系统的/etc/shells文件中可以查看到如下信息,/etc/shells是一个用来说明有效shell的配置文件。也就是说显示出来的所有方式都可以使用shell
我们去bin目录下看看,就可以发现bash和sh都是用bash解析的。我们查看一下环境变量可以看到shell就是默认用bash解析的
三、Shell脚本入门
1.脚本格式
脚本以#!/bin/bash开头。我们切换到普通用户,创建一个shell脚本
【插入一个点】如果创建一个用户,主目录已经存在,而且不是自己的权限,会导致切换用户之后只显示bash..$不会显示目录。所以需要userdel -r lyb,并且删除/home/lyb这个目录。
这个目录属于root当然创建用户切换回出问题
rm -rf lyb删除目录后,再创建,可以看到lyb这个主目录已经是lyb用户的了,然后切换用户就正常了
进入lyb目录,vim helloworld.sh
运行。如下图,可以额bash+*.sh或者sh+*.sh文件必须可达(绝对相对路径)或者./*.sh他们的不同点是:bash或者sh运行,是bash或者sh解析器去处理文件,不需要当前用户的执行权限。./ 当前用户要运行文件自己执行,是需要当前用户的执行权限的
这样就可以运行了
2.多命令操作
比如用上述命令创建日志
3.Shell中的变量
【规则1】变量由字母,数字,下划线组成,不能数字开头,环境变量最好全大写,比如HOME,LB_LIBIARY_PATH等
【规则2】bash中,变量默认为字符串类型
【规则3】变量的值如果有空格,需要用双引号或者单引号括起来。比较长的变量最好用echo $变量名输出
【系统变量】:
$HOME --当前用户的家目录
$PWD --当前目录
$SHELL --当前解释器
$USER --当前用户
【自己定义变量】:
直接写变量就可以了
unset --取消变量声明
静态变量用readonly B=2这样定义
【变量提升】
export 变量名 (全局有效,可以提供给其他程序使用,而不只是本shell脚本或者控制台)
4.特殊变量
就像是一些可替换量
$n
$0表示当前脚本的名字,$1,$2...相当于这个脚本的入参的形式变量
如下图,创建的文件名可以用$0表示,$n表示入参且不需要全部都有
$#
表示你输入了几个变量,返回的是一个数字几
$*和$@
都是所有参数,但是有一点区别,*得到的是一个整体,@的到的是单个的参数的列表
$?
如果是0表示上一条命正确执行了,否则表示上条命令报错了。比如fdsa报错,返回127,$0返回127正确执行,再查看返回0
5.运算符
expr A空格运算符空格B,如下图相当于(2+3)*2
这样看起来不是很好,所以用
$((运算式))或者$[运算式]都可以