#Shell入门学习
shell简介
- shell是一个命令行解释器,它为用户提供一个向linux内核发送请求以便运行程序的界面系统程序,用户可以用Shell来启动、挂起、停止、甚至别写一些程序。
- 因为是跑在linux的shell中,所以叫shell脚本。说白了,shell脚本就是一些命令的集合。举个例子,我想实现这样的操作:1)进入到/tmp/目录;2)列出当前目录中所有的文件名;3)把所有当前的文件拷贝到/root/目录下;4)删除当前目录下所有的文件。简单的4步在shell窗口中需要你敲4次命令,按4次回车。这样是不是很麻烦?当然这4步操作非常简单,如果是更加复杂的命令设置需要几十次操作呢?那样的话一次一次敲键盘会很麻烦。所以不妨把所有的操作都记录到一个文档中,然后去调用文档中的命令,这样一步操作就可以完成。其实这个文档呢就是shell脚本了,只是这个shell脚本有它特殊的格式。
Shell脚本能帮助我们很方便的去管理服务器,因为我们可以指定一个任务计划定时去执行某一个shell脚本实现我们想要需求。
简单的说,shell脚本就是一些命令的集合
入门编程
下面进入正题,先从简单的开始来学习
第一步、我们需要创建一个脚本,就和创建一个文件一样,
1
vim filename
一般脚本文件名我们以.sh结尾,就相当于甲鱼的屁股。
然后当我们写好脚本最后,就可以直接执行可以赋予权限
一般使用两种执行方法
1.第一种先给写好的脚本附加权限即可直接执行(注意这里面是 + x)。
2.在脚本前面加 bash 或者 sh 也可以执行无需赋权限
3.一般我们在初次接触或者试写脚本的时候都会加一个 (- x) 这样不仅可以看到脚本执行的结果,还可以看到脚本脚本对应的命令是什么
4.date命令一般用于表现时间,
可以在后面加“+%Y%m%d %H%M%S” 不仅如此还可以在日期前面加日期 +%w 在此就不一一演示了
shell脚本中的变量
变量:是shell传递数据的一种方式,用来代表每个取值的符号名。使用变量是为了解决脚本臃肿问题,且使脚本变得更加灵活。
命名规范
- 变量名可以由字母,数字和下划线组成,但是不能以数字开头,环境变量名建议大写,便于区分。
- 在bash中,变量的默认类型都是字符串型的,如果要进行数值运行,则必须制定变量类型为数值型。
- 变量用等号连接值,等号左右两侧不能有空格。
- 变量的值如果有空格吗,需要使用单引号或者双引号包括。
变量基本用法
使用反引号运行里面的命令,并把记过返回给Isvalue变量。从而可以通过Isvalue变量,来执行命令反引号里面的命令
同样的道理 反引号里面放的是命令, 当变量等于其他值,当把这个变量的值传给其他变量,这个所谓的其他变量一样拥有本身变量的值,而且变量是,可以进行拼接使用的,这个就不做演示了。
符号标识符
- 命令连接符号 ; 可以一行打多条命令 用;分号连接
- && 逻辑与 条件满足,才执行后面的语句
- || 逻辑或,条件不满足,才执行后面的语句
test “$name” == ”yangmi” && echo “&&后,命令正确执行我” || echo “||后,命令失败执行我咯”
vim
单引号和双引号的区别:
- 单引号是直接显示里面的所有内容,不做任何处理
- 双引号是将引号里面的特殊字符进行处理执行后在显示出来。
- 当双引号的加了\就等同于单引号的效果,不会做任何处理 “\ ”=’’
$
符号的用法(使用$
符号就是需要在执行脚本时 在后面追加变量如(sh hello.sh 1 2))$
n 按第n个获取自己变量,从权限类型之后 包括脚本名称都可以获取, 按空格区分个数,但超过10且包括10的参数就需要使用大括号包含,如{$
{10} 注:$
0一般表示为脚本名$
*代表该命令行中所有的命令,是把所有参数作为一个整体进行输出“$
1$
2$
3$
4”$
@ 同样也是代表命令行的所有参数,但它是把所有参数逐个进行输出”$
1” “$
2” “$
3” “$
4”$
#可以记录有多少参数$
? 执行上一个命令的返回值 执行成功,返回0,执行失败,返回非0(具体数字由命令决定) 一般用于命令之后加 ;$?
这样可以直接一行命令知晓命令是否正确运行$$
当前进程的进程号(PID),即当前脚本执行时生成的进程号$
! 后台运行的最后一个进程的进程号(PID),最近一个被放入后台执行的进程
$
符号总结起来,作为变量名的话是一个标识,做一个表达式的前缀而言就是要处理$符号后面的表达式或者语句
shift指令:参数左移,每执行一次,参数序列顺次左移一个位置,
$
# 的值减1,用于分别处理每个参数,移出去的参数不再可用输入参数,计算求和
read 命令 可以直接一行read x 就可以做到让用户输入的效果,虽然x没有加
$
符号,但是那只是在获取变量值的情况下,在运算或者赋值给别人的时候,就需要加上$
符号了, 可以写 read xread p 类似于echo的作用,也可以将上一句的输出和这一句的输入连在一起写,这样就不需要换行输入了
read [选项] 值 :
read -p(提示语句) -n(字符个数) -t(等待时间,单位为秒) –s(隐藏输入)
其实变量和java很类似,你可以一开始就申明好变量,也可以在使用的时候直接
$+
变量名$()与${}的区别
$( )的用途和反引号 ``一样,用来表示优先执行的命令
${ } 就是取变量了
$((运算内容)) 适用于数值运算
Shell脚本中的判断逻辑
if判断
if 判断语句; then
command
fi
shell 脚本中if还经常判断关于档案属性,比如判断是普通文件还是目录,判断文件是否有读写执行权限等。常用的也就几个选项:
-e :判断文件或目录是否存在
-d :判断是不是目录,并是否存在
-f :判断是否是普通文件,并存在
-r :判断文档是否有读权限
-w :判断是否有写权限
-x :判断是否可执行
使用if判断时,具体格式为:if [ -e filename ] ; then
case 命令
case命令是一个多分支的if/else命令,case变量的值用来匹配value1,value2,value3等等。匹配到后则执行跟在后面的命令直到遇到双分号为止(;;)case命令以esac作为终止符。
注:
- )内的关键词就是脚本后面跟的$1 如果两者相等才会进入’echo’
*
代表除了以上其他的情况- ;;每一个case之前都要加;; 不能忘!
for 循环
除了我们下图看到:
一种方式:最原始的for循环方式
另一种方式:类似于增加for循环,
while循环
自定义函数
function 自定义函数名{
}