shell 具体的操作

shell命令
一条命令,包括shell自身及linux系统命令
逐行输入逐行输出
无法重复使用


shell脚本
一堆shell命令的组合
一次输入,逐行执行
可以重复使用
后缀以.sh结尾
默认首行使用 #!/bin/bash 如果不写,默认也会使用bash
从上到下依次执行
使用bash 运行shell脚本
直接运行时,需要先更改运行权限,可以使用相对和绝对路径执行,但相对路径如果在本文件下,需要./,如果不在当前路径则不要加./
source或者. 为将sh文件导入,sh中定义的变量便可以导入,或者将写在文件中的配置信息马上生效


shell中变量的统一格式规则
变量名=变量值,注意,=左右两边没有空格
分为 
1,本地变量,只在当前shell中有效,或者当前脚本存续期间可用的
变量名=变量值  变量值必须是连续的,不能有空格;不能有特殊字符
变量名=‘变量值’ 变量值可以是不连续的,能有空格;特殊字符原样,引号中的是什么就是什么
变量名=“变量值” 值可以不连续,如果值中使用已定义变量,则会先调用,再赋值




命令变量的定义方式
方式一:变量名=`命令`  ``符号为键盘中1 左边的那个
方式二:变量名=$(命令)
先运行命令,再将命令执行的结果赋值给变量名




2,全局变量
查看当前的全局变量  env
定义全局变量的方式
1)export 变量名=变量值
2)变量名=变量值   export 变量名






3,内置变量  为内部自己已经定义好的,可以直接使用
$0 为获取当前脚本名称
$# 为获取脚本的参数个数
$n 获取当前脚本获取到的第n个参数
$? 获取上一次命令的执行情况,0表示成功,1,表示没有成功,127
$@ 列表 获取所有的参数
$* 字符串 获取所有的参数


shell中的运算操作
使用let进行运算
let n=n+1
还可以进行自加运算
let n+=1


字符串相关的内置变量
$RANDOM 获取随机数 最多超不过五位数 以字符串形式存在
$RANDOM | md5sum 用md5加密 
$RANDOM | md5sum | awk '{printf $1}'


截取:
str为变量名
$(str:0:5) 第一个是起始位置 后面的数字是个数
从后开始截取 ${str:0-6}


内置变量
var_name=$1
${var_name:-default}  default表示默认值,如果没有输入参数,default将会被使用


var_name=$1
${var_name:+default}
将会无视输入参数,直接输出设定好的默认值


查看变量的三种方式 


1.$变量名
使用场景: 私下使用时


2.”$变量名”
使用场景: 调用变量时


3.”${变量名}”
使用场景: 脚本中,规范化作业时


readonly 将本地变量变为只读,关闭终端后readonly功能取消
unset 删除变量,不能删除readonly的变量,




shell 表达式 用于判断、验证
方式1 [ 表达式 ]
方式2 test 表达式
注: 表达式两侧必须要有空格,表达式之间需要有空格,不然表达式表示的是一个整体,一个一体的变量名
逻辑表达式
&& 并
命令1 && 命令2
如果命令1执行成功,则执行命令2
如果命令1执行失败,则不执行命令2


num=$#
[ "${num}" -eq 2 ] && echo "参数个数为2"


|| 非 功能类似于或
命令1 || 命令2
如果命令1执行成功,则不执行命令2
如果命令1执行不成功,则执行命令2


num=$#
[ "${num}" -eq 2 ] || echo "参数个数不为2"


文件表达式
-e 判断输入的内容表示的文件是否存在
-f 判断输入的内容是否是一个文件
-d 判断输入的内容是否是一个目录
-x 判断输入的文件是否有执行权限
-r 判断文件是否可读
-w 判断文件是否可写
使用方式 : [ 文件表达式  文件名 ]
file_name=$1
test -f "${file_name}" && echo "${file_name}是一个文件"
[ -x "${file_name}" ] && /bin/bash "${file_name}"


数字表达式
-gt 大于
-lt 小于
-eq 等于
-ne 不等于
使用方式 [ n1 –gt n2 ]


字符串表达式
== 判断两个字符串是否相等
!= 判断连个字符串是否不一致
arg1=$1
arg2=$2
[ "${arg1}" =="${arg2}" ] && echo "两个参数相同"


-z 判断字符串是否为0
-n 判断字符串长度是否不为0
以上两个按照文件表达式的方式进行使用
[ -z "${arg1}" ] && echo "参数长度为0"


shell中流程控制语句的分类
简单流程控制语句
选择流程
if语句
单if语句 双if语句 多if语句
单if语句
if 条件语句
then
执行语句
fi
双if语句
if 条件语句1
then
执行语句1
else
执行语句2
fi
多if语句
if 条件语句1
then
执行语句1
elif 条件语句2
then
执行语句2
else
执行语句3
fi
case语句
case语句
case  值 in
值1)
执行语句1
;;
值2)
执行语句2
;;
值3)
执行语句3
;;
*)
执行语句
esac
循环流程
for循环
for  条件
do
执行语句
done
例子:
#!/bin/bash
# for循环控制示例


path=$1
#获取指定路径下的文件名列表
cmd=$(ls "${path}")
for i in "${cmd}"
do
echo "${i}"
done
while循环
while循环的特点,当条件为真时,执行循环,条件不成立时,循环结束


while 条件
do
执行语句
done


until循环
until的特点是当条件不成立时,执行循环,一旦条件成立则结束循环
until 条件
do
执行语句
done


复杂流程控制语句
函数
无参数格式
func_name(){
函数体
}
调用 func_name


有参数格式
func_name(){
args=$n
函数体
}

调用 func_name args1 args2


函数的使用用场景
函数体为执行命令比较频繁或者格式比较相似的命令




read 变量名  相当于 input
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值