#! /bin/bash
#echo "Hello World!"
###########################################################################################变量#####################################################################################
#以下为变量输出
my_name="111111"
echo $my_name
#以下完成了etc文件夹下文件的循环操作
#for file in $(ls /etc);do
# echo ${file}
#done
#以下定义只读变量,不可更改
#myUrl="www.baidu.com.cn"
#readonly myUrl
#myUrl="wwew.sdsd"
#删除变量 只读变量不可删除
#myValue="23232"
#unset myValue
#echo $myValue
#变量类型:局部变量 环境变量 shell变量
#shell字符串 单引号原样输出 双引号识别变量名
Str="mynameis${my_name}"
Str2='mynameis${my_name}'
Str3='mynameis'${my_name}
Str4="mynameis"$my_name
#echo $Str
#echo $Str2
#echo $Str3
#echo $Str4
#获取字符串长度
#echo ${#my_name}
#截取字符串长度
#echo ${my_name:1:4}
#查找子字符串出现位置哪个先出现计算哪个
#echo `expr index "my_name" ne`
#################################################################################################数组##############################################################################
#定义数组
array_name=(a b c d)
array_name2[0]=1
array_name2[1]=2
#echo ${array_name[1]}
#echo ${array_name2[0]}
:<<EOF
以下为数组长度以及数组元素长度
EOF
#echo ${#array_name[@]}
#echo ${#array_name2[*]}
#echo ${#array_name[1]}
###############################################################################################参数#################################################################################
#传递参数
:<<EOF
$*与$@区别:
相同点:都是引用所有参数
不同点:前者当所有参数为一个整体,后者是不同的参数
EOF
#echo "执行的文件名为:$0";
#echo "第一个参数为:$1,第二个参数为$2";
#echo "参数个数为:$#";
#echo "全部参数为:$*";
#echo "脚步当前运行的进程ID:$$";
#echo "后台运行的最后一个进程的ID:$!";
#echo "全部参数为:["$@"]";
#echo "显示shell使用的当前选项:$-";
#echo "显示最后命令的退出状态,0表示没有错误,其他则有:$?";
###############################################################################################运算符#################################################################################
#算数,关系,布尔,字符串,文件测试运算符 expr 表达式工具
#算数运算符
#echo "两数之和2+3=:`expr 2 + 3`,两数之差3-2=:`expr 3 - 1`,两数之积2*3=`expr 2 \* 3`,两数之商3/2=`expr 3 / 2`,两数取余3%2=`expr 3 % 2`,两数相等1=2:`expr 1 == 2`,两数不等1!=2:`expr 1 != 2`";
#关系运算符
a=10
b=20
#if [ $a -eq $b ]
#then
# echo "a==b"
#else
# echo "a!=b"
#fi
#echo [ $a -ne $b ]
#echo "不相等"
#echo [ $a -gt $b ]
#echo "a>b"
#echo [ $a -lt $b ]
#echo "a<b"
#echo [ $a -ge $b ]
#echo "a>=b"
#echo [ $a -le $b ]
#echo "a<=b"
#布尔运算符
#或 -o
#if [ $a -eq $b -o 2 -ne 3 ]
#then
# echo "true"
#else
# echo "false"
#fi
#非 !
#if [ ! $a -eq $b ]
#then
#echo "true"
#else
#echo "false"
#fi
#与 -a
#if [ $a -lt $b -a 2 -ne 3 ]
#then
#echo "true"
#else
# echo "false"
#fi
#逻辑运算符
:<<EOF
if [[ $a -eq $b || 2 -ne 3 ]]
then
echo "true"
else
echo "false"
fi
if [[ $a -eq $b && 2 -ne 3 ]]
then
echo "true"
else
echo "false"
fi
EOF
#字符串运算符
stra="121212";
strb="2323cd";
:<<EOF
if [ $stra = $strb ]
then
echo "a==b"
elif [ $stra != $strb ]
then
echo "a!=b"
elif [ -z $stra ]
then
echo "字符串长度为0";
elif [ -n $stra ]
then
echo "字符串长度不为0";
else [ $a ]
echo"字符串长肚是否为空";
fi
EOF
#文件测试运算符
file="/prac/test.sh";
:<<EOF
if [ -r $file ]
then
echo "文件可读"
else
echo "文件不可读"
fi
if [ -w $file ]
then
echo "文件可写"
else
echo "文件不可写"
fi
if [ -x $file ]
then
echo "文件可执行"
else
echo "文件不可执行"
fi
if [ -f $file ]
then
echo "文件为普通文件"
else
echo "文件为特殊文件"
fi
if [ -d $file ]
then
echo "文件是个目录"
else
echo "文件不是个目录"
fi
if [ -s $file ]
then
echo "文件不为空"
else
echo "文件为空"
fi
if [ -e $file ]
then
echo "文件存在"
else
echo "文件不存在"
fi
EOF
#############################echo##############################################################
:<<EOF
echo -e "OK! \n" # -e 开启转义
#显示结果定向到文件
echo "It is a test" > myfile
#显示命令执行结果
echo `date`
EOF
##########################printf#####################################################################
printf "Hello World\n"
#printf 格式控制字符(-表示左对齐,没有右对齐,10代表占10个字符,.2保留两位小数) 参数列表
:<<EOF
%% 百分号标记 #就是输出一个%
%c 字符及其ASCII码
%s 字符串
%d 有符号整数(十进制)
%u 无符号整数(十进制)
%o 无符号整数(八进制)
%x 无符号整数(十六进制)
%X 无符号整数(十六进制大写字符)
%e 浮点数字(科学计数法)
%E 浮点数字(科学计数法,用E代替e)
%f 浮点数字(用小数点符号)
%g 浮点数字(根据值的大小采用%e或%f)
%G 浮点数字(类似于%g)
%p 指针(用十六进制打印值的内存地址)
%n 存储输出字符的数量放进参数列表的下一个变量中
printf "%-10s %8s %-4s\n" 姓名 性别 体重kg
printf "%-10s %8s %-4.2f\n" 赵 女 11.2212
printf "%-10s %8s %-4.2s\n" 李 男 1213.222
EOF
###############################test命令#######################################################################
num1=100
num2=200
#[]做基本算数运算
:<<EOF
if test $[num1+num2] -eq $[num2]
then
printf "两数相等"
else
printf "两数不等"
fi
EOF
#######################################流程控制#########################################################################
:<<EOF
#while语句
i=3
while(($i>=0))
do
echo $i
let "i--"
done
#while循环可用于读取键盘信息。下面的例子中,输入信息被设置为变量FILM,按<Ctrl-D>结束循环。
echo '按下 <CTRL-D> 退出'
echo -n '输入你最喜欢的网站名: '
while read FILM
do
echo "是的!$FILM 是一个好网站"
done
#无限循环写法 while true,while :,for(( ; ; ))
#until循环
until [ $i -eq 7 ]
do
echo "等于7拉!"
let "i++"
done
#case
echo "输入1到4间的数字:"
read num
case $num in
1) echo "您选择了1"
;;
2) echo "您选择了2"
;;
3) echo "您选择了3"
;;
4) echo "您选择了4"
;;
*) echo "您没有输入1到4"
;;
esac
#break命令允许跳出所有循环(终止执行后面的所有循环)。
#continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。
#case的语法和C family语言差别很大,它需要一个esac(就是case反过来)作为结束标记,每个case分支用右圆括号,用两个分号表示break。
for lo in 1 2 4 5 5 6 7 8 9
do
echo "我循环到了$lo";
if [ $lo -eq 6 ]
then
break
fi
done
EOF
##############################################shell函数#######################################################
#函数返回值在调用该函数后通过 $? 来获得。注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。
# ${10}表示第10个参数
:<<EOF
domeFun(){
i=10;
while(($i<15))
do
echo "现在的i是$i";
let "i++"
done
echo "现在获取的是第1个参数值${1},总共参数有$#个,所有参数为$*"
return $i
}
echo "这是我的第一个函数"
domeFun 1 32 32
echo "函数结束"
echo "函数返回值为$?"
EOF
######################################输入/输出重定向###################################################
str="重定向到文件"
#输出重定向
#echo $str > myfile
#输出追加方式重定向与文件
#echo $str"追加" >myfile
#输入重定向
#read inputStr
#echo $inputStr < myfile
#########################################文件包含###################################################
# .文件名,source 文件名
. myfile
source ./test2.sh
|