#!/bin/bash 用这种来进行编译处理
#
echo "Hello World"
#变量
my_name="maizi_today"
echo $my_name
#只读变量
myUrl="wwww.baidu.com"
#只读变量是不能被删除的
#readonly myUrl
echo ${myUrl}
#删除变量
unset myUrl
echo "删除变量"
echo $myUrl
echo "删除变量成功"
#变量赋值需要带入$符号,不然就相当于字符串
temp_name=$my_name
echo $temp_name
#加减乘除运算 下面的不是单引号 加减乘除 进行四则运算的时候运算符号前后一定要有空格,乘法的时候需要进行转义。
# 如果是字符串形式的数据,会自己转为数字进行运算, 但是依然可以用 != 来比较字符串和数字类型。
a="1"
b=10
val=`expr $a + $b`
echo $val
val=`expr $b - $a`
echo $val
val=`expr $a \* $b`
echo $val
val=`expr $a / $b`
echo $val
#注意 if 这种格式只有这两种,书写格式注意
if [ $a == $b ]
then
echo "a 和 b 相等 "
fi
if [[ $a != $b ]]; then
echo "a 和 b 不相等"
fi
# 关系运算符 -------------这个只能用来比较数字类型或者数字类型的字符串,如果是字符串无法进行比较
#
# -eq 两个数相等返回true
# -ne 两个数不相等返回true
# -gt 左侧数大于右侧数返回true
# -lt 左侧数小于右侧数返回true
# -ge 左侧数大于等于右侧数返回true
# -le 左侧数小于等于右侧数返回true
aa="10"
bb="100"
if [[ $aa -eq $bb ]]; then
echo "关系运算符: aa 和 bb 相等"
fi
if [[ $aa -ne $bb ]]; then
echo "关系运算符: aa 和 bb 不相等"
fi
#字符串运算
# = 两个字符串相等返回true
# != 两个字符串不相等返回true
# -z 字符串长度为0返回true
# -n 字符串长度不为0返回true
#
# -d file 检测文件是否是目录,如果是,则返回 true
# -r file 检测文件是否可读,如果是,则返回 true
# -w file 检测文件是否可写,如果是,则返回 true
# -x file 检测文件是否可执行,如果是,则返回 true
# -s file 检测文件是否为空(文件大小是否大于0,不为空返回 true
# -e file 检测文件(包括目录)是否存在,如果是,则返回 true
#
#
如:
filename="/tmp/centosConfig/a.sh"
if [ -d "$filename" ]; then
echo "$filename is a directory "
elif [ -f "$filename" ]; then
echo "$filename is a file"
fi
#字符串方法
temp="maizi_today"
# 输出字符串长度
echo ${#temp}
# 截取字符串,下标从0开始
echo ${temp:0:5}
#数组
array=(1 2 3 4 5 6) #定义数组
array2=(aa bb cc dd ee) #定义数组
#获取某一个值
echo ${array[0]}
val=${array[1]}
echo $val
#获取长度
length=${#array[*]}
echo $length
count=${#array[@]}
echo $count
#输出程序
#
# 换行
echo -e "Hello \nWorld"
# 重定向到文件
echo "Hello World" > a.txt
# 输出当前系统时间
echo `date`
#判断语句
# if
# if-else
# if-elseif
# case
#
x=10
y=20
if [[ $x != $y ]]; then
echo "x 和 y 不相等 "
fi
#注意这个then只有在if 和 elif才有, else是没有的
#
if [ $x == $y ]
then
echo "x 和 y 相等"
elif [ $x != $y ]
then
echo "x 和 y 不相等"
else
echo "x 和 y 未知"
fi
# case 进行分支判断
#
case $1 in
start)
echo "程序启动成功"
;;
stop)
echo "程序停止"
;;
*)
echo "程序正在部署中"
;;
esac
# for 循环 ,记住这里只有2个点
#数组
# 支持一维数组 ,没有限制数组的大小
# 在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:
#
array_data=(1 "12345678" 3 "4")
echo ${array_data[1]}
#
for i in {1..5}; do
echo $i
done
for langue in java android ios; do
echo "${langue}"_name
done
echo "\n\n"
for (( i = 0; i < 10; i++ )); do
echo $i
done
for file in $(ls /etc); do
echo ${file}
done
for file in $HOME/.bash*; do
echo $file
done
#获取长度
echo ${#array_data[@]}
echo ${#array_data[1]}
#函数
sysout(){
echo "我是函数"
}
sysout
#有返回值 $?接收上一程序的返回值状态
#
test(){
return 5
}
test
result=$?
echo $result
#定义一个需要参数的
#
show(){
echo $1
echo $2
}
show "maizi_today" "yubo"
#重定向
# $echo result > file #将结果写入文件,结果不会在控制台展示,而是在文件中,覆盖写
# $echo result >> file #将结果写入文件,结果不会在控制台展示,而是在文件中,追加写
# echo input < file #获取输入流
#
ls -l >yubo.txt 直接重定向
#Shell 传递参数
#
echo "Shell 传递参数实例!";
echo "第一个参数为:$1";
echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示:$*";
echo "传递的参数作为多个字符串显示:$@"
echo "脚本运行的当前进程ID号"