shell脚本

本文介绍了Shell脚本的基础知识,包括脚本的创建与执行、变量定义与引用、字符串操作、数组使用、参数传递、逻辑判断及输出控制等内容。

闲来无事,研究shell脚本
shell基本演示

#!xxx:xx是解释此脚本的shell程序所在位置

例如:
创建一个test.sh文件:vim test.sh
shell代码:

#!/bin/bash
echo "first shell program!"

赋予test.sh可执行权限:chmod +x test.sh
执行test.sh:./test.sh
输出:
在这里插入图片描述

shell变量命名及引用
变量名和值之间用“=”分割,不能有空格,变量名开头不能有数字,不能使用bash里的关键
引用变量使用$变量名
例如:
vim test02.sh

#!/bin/bash
my_var01="这是我的第一个变量"
echo $my_var01

记得要给文件授予执行权限:chmod +x test02.sh
输出:
在这里插入图片描述

变量及字符串

#! /bin/bash
#只读变量,使用readonly修饰之后,再次赋值无法成功
my_var02="one only"
readonly my_var02

my_var02="two"
echo ${my_var02}

#字符串拼接
par0="head info str"
par01="一个旺财"

echo "拼接结果:${par0} \"${par01}\""


#删除变量 unset,删除之后不会有任何输出

param01="one param"
unset param01
echo "delete result:${param01}"


#获取字符串长度,从0开始

paramLen="test length"
echo ${paramLen:1:3}

#查找字符串:查找w所在的索引

paramSeach="nwjtest seach str"
echo `expr index "${paramSeach}" w`

:<<!
巴拉巴拉巴拉了多行注释
!

数组

#! /bin/bash
  
#数组,数组之间用空格分隔,字符串用""
#获取某一个数组元素${数组名[下标]}
arr01=("a" "b" 1 3)

echo ${arr01[0]} ${arr01[2]}

#获取所有元素:@
echo "all arr:" ${arr01[@]}

#数组长度
length=${#arr01[@]}
legth2=${#arr01[*]}

echo "length:"${length}",length2:"${length2}

执行shell脚本时传递参数
与java -jar xxx.jar param1 param2 效果相同,java在执行.jar文件时给主函数传递参数

shell传递:./xxx.sh param1 param2 param3 … 传递参数
shell获取参数:$n
具体代码:创建shell文件:vim test04_param.sh


#! /bin/bash
  
#shell脚本传递参数:参照java jar命令启动时给主函数传递参数

echo "参数传递实例";
echo "获得参数0:$0";
echo "获得参数1:$1";
echo "获得参数2:$2";

# $@与$*的区别:$*传递的参数相当于 "1 2 3"(三个参数一次性传递) ,$@传递的参数相当于 "1" "2" "3"(传递了三个参>数)

echo "打印系列参数:$0 $1 $2"
echo "打印系列参数2: $@"
echo "打印系列参数3:$*"

echo "脚本执行进程ID号:"$$
echo "参数个数:$#"


#效果演示
for idx in "$*" ;do
        echo "result 1:"$idx

done

for idx in "$@";do
        echo "result 2:"$idx
done

执行:chmod +x test04_param.sh
./test04_param.sh 旺财1 旺财2
执行结果:
在这里插入图片描述
逻辑判断
逻辑判断表达式[]中,前后需要空格,否则判断报错:[空格$a == $b空格]


#! /bin/bash
  
#运算符演示,运算符前后需要空格分隔,否则变成了字符串了
a=20;
b=40;
res=`expr ${a} + ${b}`;
echo "a+b:"${res};

res=`expr ${a} - ${b}`;
echo "a-b:"${res};

res=`expr ${a} \* ${b}`;
echo "a*b:"${res};

res=`expr ${a} % ${b}`;
echo "a % b:"${res};


if [ $a == $b ]
then
  echo "a 等于 b"

fi
 if [ $a != $b ]
   then
   echo "a 不等于 b"
 fi


echo输出

#! /bin/bash

#echo输出测试,-e表示开启转义

echo -e "test \n other word" 

#开启转义,不换行
echo -e "test two \c"

echo "one space"

#输出到指定文件,当前路径下的one文件
echo "test info write to file" > one


#输出日期
echo `date`

printf输出

#! /bin/bash

#printf演示,printf默认是不带换行的,需要手动换行

printf "输出一句话\n"

#按照格式输出
#语法 printf format-string [param]

printf "%-10s %-8s %-4s\n" 产品 分类 出口量
printf "%-10s %-8s %-4s\n" 牛奶  食品  1000kg
printf "%-10s %-8s %-4s\n" 苹果  水果  5000kg
printf "%-10s %-8s %-4s\n" 桉树  植物  1000棵

:<<!
%s %c %d %f 都是格式替代符,%s 输出一个字符串,%d 整型输出,%c 输出一个字符,%f 输出实数,以小数形式输出。

%-10s 指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。

%-4.2f 指格式化为小数,其中 .2 指保留2位小数。
!

printf "%-4.3f \n" 10.987654

#输出一个字符串和一个整型数字
printf "%s %d\n" "abcdef" 123.456

printf "%s\n"  hhhhh

test判断

#! /bin/bash

#test演示:test用于测试条件是否成立

#数值测试: -eq:等于, -ne :不等于 , -gt:大于 , -ge:大于等于,-lt:小于 ,-le:小于等于
a=10;
b=20;
if test $[a] -eq $[b]
then
	echo "相等"
else
	echo "不相等"
fi

#[]:用于执行基本运算,如下
x=9;
y=11;

res=$[x+y];
echo "res:${res}"



#字符串测试

str1="abc"
str2="abd"

if test ${str1} = ${str2}
then 
	echo "字符串相等"
else
	echo "字符串不相等"
fi


#文件测试: -e :文件存在返回真 ,-r:文件可读返回真,-w:文件可写返回真,-x:文件可执行返回真,-s...:查API去吧


#演示:进入/data_mine目录下查看是否有day_1文件
cd /data_mine

if test -e ./day_1
then
	echo "is exist"
else
	echo "is no exist"
fi


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值