shell脚本 基础

shell脚本基础

shell的作用

shell是linus中一个特殊的应用程序  他介于操作系统和用户之间   相当于一个翻译器及 将用户输入的操作命令进行解析,将需要执行的操作传达给内核,有内核进行各方面调度  最总也由shell来输出执行的结果

shell也由多种类型 , 不同的shell间器内部指令等也存在差异 。 通过/etc /shells文件来了解房前系统支持的shell脚本的类型,

cat /etc/shells 

useradd -s   [shell类型]

inux中常见的shell

  • bash:基于gun的框架下发展的shell

  • csh:类似c语言的shell

  • tcsh:整合了csh提供了更多功能

  • sh:已经被bash替换

  • nologin:让用户无法登录

  • 目前绝大多数linux版本采用bash为默认shell

shell脚本的构成

1.将命令按顺序列出   保存于文件中   最后执行脚本  自动执行其中的命令

2.执行需要权限  可直接使用绝对路径

3.通过脚本环境改变后依然可以使用脚本

构成

脚本申明  (解释器)  : 第一行开头的   ”#! /bin/bash“   表示后续代码由/bin/bash程序来解释执行,也有其他类型的解释器  如  #! /bin/python      #!/bin/expect

注释信息:以#开头的为注释信息   为解释命令用途  记录  警示等用处

可执行语句:   能实际执行  以达成最总目的的命令 

(此处为以脚本形式搭建本地yum仓库)

 

变量作用范围

通常情况下 新定义的变量只在当前shell

命名要求

1.区分大小写

2.不能是程序中的保留字和一些内饰变量   如  if  for  hostname等

3.只能使用数字。字母下划线且不能以数字开头  不支持短横线   这点与主机名相反

4.尽量使用引文    使用词义通俗易懂   

变量赋值    name=‘ct’    变量名   =  变量值

变量入职时临时生效的无法永久生效    会随脚本结束自动删除

引用变量可是$name

                      ${name}

 变量强引用   及直接引用引号内的字符不会引用变量

 总结

1.赋值时使用双引号“可直接调用变量“。

2.赋值时使用单引号会直接引用其中的字符 不会调用变量

3.赋值时使用``或()为调用其中命令执行结果

4.{}可用于分隔变量。

变量追加值

变量名+=追加值

在已存在变量中加入新的部分

 read-p

提取键盘输入的内容为变量

整数的运算

expr只能进行证书的运算

环境变量

系统自行创建的,用来设置用户的工作环境

可使用env查看

需要记住的常见环境变量

常见变量

$USER 表示用户名称

$HOME 表示用户的宿主目录

$LANG 表示语言和字符集

$PWD 表示当前所在工作目录

$PATH 表示可执行用户程序的默认路径

次一级变量都可使用上一级变量,但无发从父进程中使用子进程和孙子进程的变量

子进程修改了从父进程获得的变量就会传给孙子进程

一般只在系统配置文件中,脚本中少见

环境变量的全局配置文件

/etc/profile如果修改此文件会作用于所有用户

~/.bash_profile 用户独立的配置文件,修改这个文件只作用于当前用户

只读变量

变量值不允许修改(重新赋值)的情况

法使用 unset删除

最快方法重启

位置变量

位置变量也称为位置参数,使用$1、$2、$3、…、$9 表示

echo "$@"            所有项
echo "$0"            脚本自身
echo "$#"            后面参数的个数

echo "$1"            位置1
echo "$2"            位置2
echo "${10}"         位置10
echo "$10"           位置1和0

预定义(状态)变量

$*   将所有参数看作一个整体返回所有

$@将单个参数作为一个个体 一个一个返回所有

条件语句

test 测试文件的表达式 是否成立

格式1:test  条件表达式
格式2:[  条件表达式  ]

用  $?  查看返回上一次命令执行的结果  

如果执行成功返回结果为0

失败返回结果为1

-d:测试是否为文件夹
-e:测试目录或文件是否存在
-f:测试是否为文件
-r:测试当前用户是否有权限读取
-w:测试当前用户是否有权限写入

-x:测试当前用户是否有权限执行
-L: 测试是否为软连接文件

比较整数数值

[ 整数1    选项      整数2 ]     与[   ]   中间要有空格

 同于用$?查看结果     0为时      1为否

-eq                 第一个是否等于第二个   

-ne                 第一个不等于第二个

-gt                  第一个大于第二个

-lt                   第一个小于第二个

-le                小于等于

-ge                 大于等于

 字符串与字符串间的比较

格式     [ 字符串1 = 字符串 2   ]    是否相同

            [ 字符串1  != 字符串2 ]  是否不相同

            [  -z 字符串 ]      是否为空

            [ -n 字符串 ] 字符是否存在

逻辑测试 (短路运算)

[ 表达式1 ] 操作符 [ 表达式2 ]

命令1 操作符 命令2

-a或&&         逻辑与      二者缺一不可  都真才为真     一个错误即可结束返回结果

-o或||           逻辑或       二者满足一个即可                 一个为真即可结束返回结果

!:逻辑否

 ping 小脚本
-c 发送包的个数
-i 发送的间隔时间
-W 超时时间
-w 多少秒后停止ping操作

IF语句

结构

反分支

if                     判断条件

then               条件为真的分支代码

fi

双分支

if            判断条件

else       为真条件

then       为假的条件

fi

多分枝

if                判断条件

then          为真的代码

elif             判断条件

then          为真的代码

elif             判断条件

then          为真的代码

...

fi

if [ "$USER" != "root" ]
then
        echo "非管理员用户无权限操作"
else
echo "是管理员用户"
fi

case

case 变量引用 in
PAT1)
 分支1
 ;;
PAT2)
 分支2
 ;;
...
*)
 默认分支
 ;;

esac

变量为pat中的内容    可以时变量也可以时固定的数字相当于选项  选择及执行相关分支后续的命令

#!/bin/bash
read -p "请输入你的分数" score

case $score in
100)
echo "$score 你太优秀了"
;;
[89][0-9])
echo "$score 表现不错"
;;
[67][0-9])
echo "$score 你及格了"
;;
[0-9]|[1-5][0-9])
echo "$score 你不及格"
;;
*)
echo "输入有误"
esac

常用命令总结

cut

cut命令:提取想要的信息。

选项:

-d 指定分隔符 例如 cut -d ":"指定:为分隔符。

-f 选择第几列 例如 cut -f3 取第三列,-f1,3取第1列和第三列,-f1-3取1-3列。

sort

sort   排序

选项

-r   基于之前操作执行倒叙

-n 按数字大小排序 默认为按首字母排序

-t  指定分隔符

-k  指定列   如   -k  5        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值