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))
也是依次执行
先执行最里面的
未完待续 ……