Shell的作用
命令解释器,“翻译官”,介于系统内核与用户之间,负责解释命令行
用户的登录Shell
登录后默认使用的Shell程序,一般为 /bin/bash
不同Shell的内部指令、运行环境等会有所区别
cat /etc/shells
编写第一个Shell脚本
格式以*.sh
*是你起的名字,什么名字无所谓,但是结尾必须是sh为结尾的
vim ceshi.sh
里面可以写一些命令,他执行bash命令是依次从上到下执行的
由于是刚刚接触,可以先编写一些简单的语句,这里所谓的语句,就是平时使用的命令
你可以随便写一些,目前这个还是很好理解的
执行脚本的办法
一:./脚本文件路径
二:sh 脚本文件路径
三:source 脚本文件路径
使用第一种要为其设置执行权限 ./脚本文件路径
chmod +x ceshi.sh
第二种和第三种可以不给执行权限 但是他们的结果都是一样的
三种执行方式,都是一样的效果
写入的都是依次执行的
更完善的脚本构成
为了更完善脚本,向上面那样,也是可以执行的,但是可能会给后来的人添加难度
最好是第一排声明脚本运行的环境
注释信息 以‘#’开头的行为注释行 ,注释行不会执行
重定向
【类型】【操作符】【用途】
重定向输入 ; < ; 从指定的文件读取数据,而不是从键盘输入
重定向输出; > ;将输出结果保存到指定的文件(覆盖原文件)
重定向输出;>>; 将输出结果追加到指定的文件
标准错误输出;2> ;将错误信息保存到指定的文件(覆盖原文件)
标准错误输出;2>>; 将错误信息追加到指定的文件中
混合输出;&> ; 将标准输出、标准错误的内容保存到同一个文件中
例如下面的
uname -p > kernel.txt
# 将uname 输出的东西写入到 kernel.txt中,并覆盖原有内容
uname -r >> kernel.txt
#将输出内容追加到 kernel.txt ,不会覆盖原文件内容,只是在结尾处新加追加内容
echo "123456" > pass.txt
cat pass.txt
useradd tom
passwd --stdin tom < pass.txt
# 将pass.txt文件内容当成密码,输入到tom的密码里,也就是把tom密码设置为123456
管道操作
将左侧的命令输出结果,作为右侧命令的处理对象
也就是说,第一次的结果上再次进行第二次处理
例如:
df -hT
查看磁盘使用情况
df -hT | grep '/$'
查看磁盘使用情况 ,并检索前面输出内容中以/结尾的
df -hT | grep '/$' | awk '{print $1}
查看磁盘使用情况 ,并检索前面输出内容中以/结尾的,并查看里面的第一个信息 默认是以空格切割开的,$1 就是第一块 $4就是第四块 $1,$3就是看第1块和第三块1的
自定义变量
变量名=变量值
变量名以字母或下划线开头,区分大小写,建议全大写
如果要查看的话可以使用
echo $变量名
变量名=变量值
定义了一个变量 为a赋值了,如果要查看
echo $变量名
现在我们再赋值一个b值为world
输出多个变量可以使用
echo $变量名 $变量名 (中间有没有空格都可以)
变量后面添加别的可以使用
echo ${变量名}其他的字符
赋值时使用引号的含义
双引号 "
可以有空格或者其他其他符号 但是写了变量格式,就会输出变量
单引号 '
使用变量并不会生效,同时也支持符号
反撇符号的使用 `
例如:
ls -lh `which useradd`
其中的含义和 ls -lh /usr/sbin/useradd 是一样的
他会优先处理 ·· 里的内容然后将 ·· 的输出内容添加到前面的命令中
rpm -qc `rpm -qf `which useradd``
例如这个意思上是对的但是输出结果不对,我们还有另外一种写法
rpm -qc $(rpm -qf $(which useradd))
也是依次执行
先执行最里面的
read输入变量
read 变量名
输入变量内容
输入完变量值后回车
如果需要带有输入提示的read可以使用
read -p '提示语句' 变量名
现在ppp的变量值为hello world
设置变量的作用范围
变量范围分为局部变量和全局变量
向上面我们设置的变量全为局部变量
如上图,我们在bash里设置了变量,当我们在当前bash里查看就可以查看到,当我们切换进入子bash里查看就查看不到了-------这个就是局部变量
设置全局变量
export 变量名=变量值
将局部变量转换为全局变量
现在q和w均为局部变量
使用
export 变量名 后面可以跟多个变量名
export 变量名 变量名 ……
整数变量的运算(expr)
expr 变量1 运算符 变量2 [运算符 变量3] ...
常用运算符
*加法运算:+*减法运算: -
*乘法运算: \*
*除法运算: /
*求模(取余)运算: %
$() --- 命令嵌套``
${} ----- 解决变量名混淆问题
$(()) --- 实现整数的混合运算
特殊的Shell变量
由系统提前创建,用来设置用户的工作环境
配置文件: /etc/profile、~/.bash_profile
常见的环境变量:
*PWD、PATH
*USER 、SHELL、HOME
这些我们没有手动创建,是系统自动创建的
例如我们制作用户登录的欢迎脚本
vim /opt/tarro.sh
写入
#!/bin/bash
echo "欢迎名称为: $USER 的用户登录"
chmod +x /opt/tarro.sh
vim /etc/profile
在最后一行输入
source /opt/tarro.sh
位置变量
意思就是当我们在脚本里写了变量,但是没有明确给变量的变量值
我们可以在执行脚本的时候在后面把值写上 空格隔开,每个值对应着相应位置的变量
随便创建一个脚本里面写入
这时hello就对应着$1 world对应着$2
没有明确写变量值的变量可以在执行脚本前后面加上对应的值