NDK02-Shell脚本编程

java语言编写的后缀是.java 而 .sh 就是shell脚本的后缀
Shell Script有两种解释器

  1. 解释器一 .bash
  2. 解释器二 .sh

执行脚本语言的方式有三种

  1. /bin/bash test02.sh
  2. ./test02.sh (这种方式如果没有权限不能够执行 chmod 777 test02.sh)
  3. sh test02.sh

示例一、test01.sh

#!/bin/bash

echo "========================="

age=99
echo age= $age
echo pwd= $pwd
echo pwd= $PWD

echo "当前shell脚本语言的名称:$0"
echo "参数1 $1"
echo "参数2 $2"

echo "这个脚本是否执行成功 $?"
echo "外界传递了多少参数 $*"
echo "外界传递的参数的数量 $#"

#!/bin/bash 这句话必须写在第一行不是注释的意思,它代表这个脚本语言是bash解释器的意思, 还有另一个是#!/bin/sh它代表是sh解释器
命令:

  1. echo $? 代表询问上一个命令是否成功
  2. df -h 查看当前服务磁盘使用情况
    脚本执行结果:
localhost:day02 dsh$ sh test01.sh hhhh ggg
=========================
age= 99
pwd=
pwd= /Users/dsh/ndk_study/day02
当前shell脚本语言的名称:test01.sh
参数1 hhhh
参数2 ggg
这个脚本是否执行成功 0
外界传递了多少参数 hhhh ggg
外界传递的参数的数量 2

注意事项:

age=99 这种赋值语句等号两边都不能有空格
pwd 命令是打印当前文件夹的路径, 但是如果在脚本里面就必须使用大写$PWD才能打印出路劲
$0 $1 $2 分别代表脚本文件的名称 , 1 2 3 分别代表参数
``

示例二、seq遍历命令 test02.sh

seq 1 20 执行这个命令可以打印出 1到20
利用这种命令来写脚本

#!/bin/bash

for i in `seq 1 6`
do
echo "遍历1到6之间的数字:$i"
done

执行结果

localhost:day02 dsh$ sh test02.sh
遍历1到6之间的数字:1
遍历1到6之间的数字:2
遍历1到6之间的数字:3
遍历1到6之间的数字:4
遍历1到6之间的数字:5
遍历1到6之间的数字:6

实例三、运算符命令 test03.sh

执行expr 100 + 100 会打印出200 使用脚本执行这个命令

#!/bin/bash

# 累加功能
sum=0
for((f=0;f<=100;f++))
do
	sum=`expr $f + $sum`
done

echo "1-100的累加结果值等于 $sum"

打印结果是

1-100的累加结果值等于 5050

sum=expr $f + $sum 注意 sum= 等于号两边不能有空 但是命令expr 100 + 100 必须有空格

实例四、查找和打包命令 test04.sh

#!/bin/bash

#查找当前目录下的所有txt文件进行打包操作
for i in `find ./ -name "*.txt"`
do
	tar -czf txtall.tgz $i
done

执行结果

localhost:day02 dsh$ sh test04.sh 
localhost:day02 dsh$ ls
aaa.txt		test02.sh	test04.sh
test01.sh	test03.sh	txtall.tgz

实例五、while循环 test05.sh

#!/bin/bash

i=0
while((i<10))
do
	i=`expr $i + 1`
done

echo "累加结果是 $i"

执行结果

localhost:day02 dsh$ sh test05.sh 
累加结果是 10

实例六、打印当前路径test06.sh

#!/bin/bash

echo 当前的路劲 $PWD
echo 当前的路径 `pwd`

打印结果是

localhost:day02 dsh$ sh test07.sh 
当前的路劲 /Users/dsh/ndk_study/day02
当前的路径 /Users/dsh/ndk_study/day02

实例七、读文件test07.sh

-p 指定要显示的提示
-s 静默输入,一般用于密码

#!/bin/bash
i=0
while((i<=0))
do

read -sp "请输入密码:" password

if(($password == 123456)); then
	i=10
	echo "输入正确"
else
	echo "输入错误,请重新输入"
fi

done

执行结果:

localhost:day02 dsh$ sh test07.sh 
请输入密码:输入错误,请重新输入
请输入密码:输入正确

实例八、if else 语句

#!/bin/bash

i=10
if((i==1)); then
	echo "这是启动模式"
elif((i==2)); then
	echo "这是暂停模式"
else
	echo "未知错误"
fi

else if 写法是 elif 网上有人写错 害我掉到坑里

实例九 test09.sh

#!/bin/bash

# -d 代表目录的意思
if [ ! -d `pwd`/shell ]; then
	mkdir -p `pwd`/shell
else
	echo "shell文件夹已经存在"
fi

问题? 什么时候用中括号 什么时候用括号呢?

(())是一种数学计算命令,它除了可以进行最基本的加减乘除运算,还可以进行大于、小于、等于等关系运算,以及与、或、非逻辑运算
在进行字符串比较时,最好使用双中括号 [[ ]]

实例十 test10.sh 兼容性好的运算符

result=$((100+100)) 这种兼容性较差

result=`expr 100 + 1000` 这种兼容性较好

实例十一 test11.sh 字符串操作

#!/bin/bash

var1="abcd"
var2="zaqqq"

if [[ $var1 = $var2 ]]; then
	echo "相等"
else
	echo "不相等"
fi


# 字符串是否为空
if [ $var1 ]; then
	echo "是空"
else
	echo "不是空"
fi

使用= 而不是使用 == 判断相等

实例十二 重定向

linux 是万物皆文件 而我们编写命令的窗口也是一个文件,这个文件就是0
我们需要做的内容是把一个文件的内容重定向到屏幕上 cat 0< file.txt

localhost:day02 dsh$ cat 0< file.txt

hahahjsajhajhakajk

实例十三 函数

#!/bin/bash

function test01(){
	echo "函数01run。。。。"
}

#调用上面的函数
test01

function test02(){
	var1="test01"
	var2="test02"
	echo $var1
	echo "函数02 run。。。。"
}

# 带有参数的函数  如何传参?
function test03(){
	echo "test03 method run 。。。。参数1 `expr $1`"
}

test03 9999

打印结果

localhost:day02 dsh$ sh test13.sh 
函数01run。。。。
test03 method run 。。。。参数1 9999
发布了58 篇原创文章 · 获赞 16 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/dingshuhong_/article/details/103981026