java语言编写的后缀是.java 而 .sh 就是shell脚本的后缀
Shell Script有两种解释器
- 解释器一 .bash
- 解释器二 .sh
执行脚本语言的方式有三种
/bin/bash test02.sh
-
./test02.sh
(这种方式如果没有权限不能够执行 chmod 777 test02.sh) 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解释器
命令:
-
echo $?
代表询问上一个命令是否成功 -
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