#!/bin/bash
echo "Hello World!"
chomod:使脚本具有可执行权限
./:当前目录 执行脚本
chmod +x test.sh
./test.sh
直接运行解释器 参数为脚本文件名
/bin/sh test.sh
定义变量 :your_name=“aniu” (等号左右不能有空格)
for file in $(ls /etc):循环etc 下文件名
your_name="aniu"
for file in 'ls /etc'
$your_name:使用变量
your_name="aniu"
echo $your_name
readonly :修饰变量 变量为只读变量 变量值不可以被修改
your_name="aniu"
readonly your_name
unset :删除变量 (不能删除被readonly修饰的变量)
unset your_name
运行shell时,会同时存在三种变量:
- 局部变量
在脚本或命令中定义 - 环境变量
所有程序,包括shell启动的程序都能访问的环境变量 - shell变量
shell程序设置的特殊变量,保证shell 正常运行
shell 命令行参数
$0 当前脚本文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数
$* 传递给脚本或函数的所有参数
$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到
$? 上个命令的退出状态,或函数的返回值
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID
#!/bin/bash
#!/bin/bash
echo "File Name: $0"
echo "First Parameter : $1"
echo "First Parameter : $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"
shell 字符串
单引号:不能存在变量
双引号:允许变量存在 可以出现转义符
str='string'
str="string\"$your_name\""
str="string"$your_name""
str="string${your_name}"
//获取字符串长度
echo ${#str}//6
//提取字符串
echo ${str:1:4} //trin
//查找‘r’的位置
echo `expr index "$str" r`//2
定义数组
arr_name=(1 2 3)
//单独定义数组分量
arr_name[0]=1
//读取数组元素
your_name=${arr_name[0]}
//使用@符号获取数组所有元素
echo ${arr_name[@]}
//获取数组元素个数
lengh=${#arr_name[@]}
shell 注释
//注释符号
#
//花括号 标记为函数 没有地方调用可以实现 多行注释
{}
chmod +x test.sh
./test.sh 1 2
shell传递参数
//特殊字符处理参数
$#
$*
$$ 脚本运行当前进程号
$! 后台运行的最后一个进程ID号
echo "执行的文件名$0"
echo "第一个参数$1"
echo "第二个参数$2"
echo "参数的个数为$#"
echo "传递参数作为一个字符串显示$*"
shell 基本运算
expr 表达式计算工具
2 + 2 表达式和运算符之间要有空格
+
-
* //注意 *前面加\ (反斜杠)
/
%
=
==
!=
sum=`expr 2 + 2`
echo "两数之和:$sum"
mul=`expr 2 \* 2`
echo "两数之积:$mul"
if [ 2 == 2 ]
then
echo "2 等于 2"
fi
if [ 2 != 3 ]
then
echo "2 不等于 3"
fi
关系运算符
-eq 相等
-ne 不相等
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
if [ 2 -le 3 ]
then
echo "2 小于等于 3"
fi
布尔运算符
! //非运算
-o //或运算
-a //与运算
逻辑运算
&&
||
字符串运算符
= //字符串是否相等
!= //两个字符串是否不相等
-z //字符串长度是否为 0
-n //字符串长度是否不为0
str //字符串是否不为空
文件测试运算符
-b file //是否块设备文件
-c file //是否字符设备文件
-d file //是否目录
-f file //是否普通文件
-g file //是否设置了SGID位
-k file //是否设置了粘着位Sticky Bit
-p file //是否有名管道
-u file //是否设置SUID位
-r file // 是否可读
-w file //是否可写
-x file //是否可执行
-s file //是否为空
-e file //是否存在
file="/var/www/aniu/text.sh"
if [ -r file ]
then
echo "file 可读"
else
echo "file 不可读"
fi
read : 从标准输入读取
#! /bin/bash
read name
echo "$name is a test"
//-e 开启转义
echo -e "OK \n"
//-c 不换行
echo -e "OK \c"
//显示结果定向直文件
echo "aniu" >myfile
//显示当前日期
echo `date`
//[]中执行基本运算 不能有空格
result=[2*5]
if con1
then
com1
elif con2
com2
else
comN
fi
//for循环
for var in item item2
do
com1
done
//while循环
while con1
do
com1
done
例子case......
#!/bin/sh
int=1
while(( $int<=5 ))
do
echo $int
//bash let 命令
let "int++"
done
例子case.....
#!/bin/bash
a=0
until [ ! $a -lt 10 ]
do
echo $a
a=`expr $a + 1`
done
//case
echo "输入1到5之间的数字"
echo "输入的数字为:"
read aNum
case $aNum in
1) echo "选择1"
;;
2) echo "选择2"
;;
*) echo "没有输入"
;;
esac
//跳出循环
#!/bin/bash
while :
do
echo -n "输入1-5"
read aNum
case $aNum in
1|2|3) echo "输入:$aNum"
;;
*) echo "结束"
break
;;
esac
done
shell 函数
#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com
funWithReturn(){
echo "这个函数会对输入的两个数字进行相加运算..."
echo "输入第一个数字: "
read aNum
echo "输入第二个数字: "
read anotherNum
echo "两个数字分别为 $aNum 和 $anotherNum !"
return $(($aNum+$anotherNum))
}
funWithReturn
//$? 获取返回值
echo "输入的两个数字之和为 $? !"
-----------------------------------
#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com
funWithParam(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
echo "第十个参数为 $10 !"
//n>=10 用${n}获取参数
echo "第十个参数为 ${10} !"
echo "第十一个参数为 ${11} !"
echo "参数总数有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
#关闭所有java进程
ps -ef|grep java|grep -v “grep”|awk ‘{print $2}’|xargs kill -9
在windows下编辑然后上传到linux系统里执行的。.sh文件的格式为dos格式
vi test.sh
:set ff=unix