shell 语法基础

来源:互联网 发布:开淘宝店做淘宝客 编辑:程序博客网 时间:2024/05/17 09:02
#!/bin/bash
#变量只读
plt="panlitao"
readonly plt
#只读变量不允许修改,会报错
#plt="dxf"
echo ${plt}


#删除变量,因为是只读的,会报错
#unset plt
dxf="dengxiaofen"
echo ${dxf}
unset dxf
#已经删除没有任何的输出
echo ${dxf}
#特殊变量
# $当前运行的进程id
echo $$
#$n 表示传入脚本的第n个参数,$# 传给脚本或函数的参数个数,#@或$* 传给脚本或函数的所有参数
echo "filename:$()"
echo "onepara:$1"
echo "paracount:$#"
echo "para:$@"
echo "para:$*"




#循环参数
echo "\$*"
for var in $*
do
 echo "${var}"
done


echo "\$@"
for var in $@
do
 echo "${var}"
done


echo "\"\$*\""
for var in "$*"
do
 echo "${var}"
done


echo  "\"\$@\""
for var in "$@"
do
 echo "${var}"
done
#获取上个指令的执行状态
echo "getstate:$?"
#时间
jdate=$(date)
echo "Date is ${jdate}"


USERS=$(who | wc -l)
echo "Logged in user are ${USERS}"


UP=$(date ; uptime)
echo "Uptime is ${UP}"




#变量的替换
#可以使用的变量替换形式:
#形式 说明
#${var} 变量本来的值
#${var:-word} 如果变量 var 为空或已被删除(unset),那么返回 word,但不改变 var 的值。
#${var:=word} 如果变量 var 为空或已被删除(unset),那么返回 word,并将 var 的值设置为 word。
#${var:?message} 如果变量 var 为空或已被删除(unset),那么将消息 message 送到标准错误输出,可以用来检测变量 var 是否可以被正常赋值。
#若此替换出现在Shell脚本中,那么脚本将停止运行。
#${var:+word} 如果变量 var 被定义,那么返回 word,但不改变 var 的值。


echo ${var:-"Variable is not set"}
echo "1 - Value of var is ${var}"


echo ${var:="Variable is not set"}
echo "2 - Value of var is ${var}"


unset var
echo ${var:+"This is default value"}
echo "3 - Value of var is $var"


var="Prefix"
echo ${var:+"This is default value"}
echo "4 - Value of var is $var"


echo ${var:?"Print this message"}
echo "5 - Value of var is ${var}"


#运算符
ysfa=10
ysfb=20
ysv=$(expr ${ysfa} + ${ysfb})


echo "a+b=${ysv}"


ysv=$(expr ${ysfa} - ${ysfb})


echo "a-b=${ysv}"


ysv=$(expr ${ysfa} \* ${ysfb})


echo "a*b=${ysv}"


ysv=$(expr ${ysfa} / ${ysfb})


echo "a/b=${ysv}"




nxsd=$(echo "scale=3; 13 / 2"| bc)
echo "xiaoshudian=${nxsd}"


#字符串
zfc="panlitao"
#字符串长度
echo ${#zfc}
#截取字符串
echo ${zfc:0:3}
#查找字符串
echo $(expr index "${zfc}" li )


#数组
szdome1=("panlitao" "dengxiaofen" "panwenxuan")
echo ${szdome1[1]}
szdome2[0]="panlitao"
szdome2[1]="dengxiaofen"
szdome2[2]="panwenxuan"
echo ${szdome2[2]}
#@和*
echo "@=${szdome2[@]}"
echo "*=${szdome2[*]}"
#获取数组长度
echo ${#szdome2[@]}
echo ${#szdome2[*]}
echo ${#szdome2[2]}
#字符串长度
strlg="panlitao"
echo ${#strlg}


#控制条件
ifa=10
ifb=20


if [ ${ifa} == ${ifb} ]
then
 echo "a=b"
else
 echo "a!=b"
fi


if [ ${ifa} == ${ifb} ]
then
 echo "a=b"
elif [ ${ifa}==10 ]
then
 echo "a=10"
else
 echo "a!=b"
fi


#循环


for lp in 2 4 6 8 10 11 23 24 29
do
echo "for:${lp}"
done


#显示主目录下以 .bash 开头的文件
for FILE in $HOME/.bash*
do
   echo $FILE
done


# while
COUNTER=0
while [ ${COUNTER} != 5 ]
do
    COUNTER=$(expr ${COUNTER} + 1)
    echo ${COUNTER}
done


# 读取5次输入的值
#echo 'type <CTRL-D> to terminate'
#echo -n 'enter your most liked film: '
#while  [ ${COUNTER} != 10 ]
#do
# read FILM
#    echo "Yeah! great film the $FILM"
# COUNTER=$(expr ${COUNTER} + 1)
#done


#break命令,输入不是1-5的跳出循环
#while :
#do
#    echo -n "Input a number between 1 to 5: "
#    read aNum
#    case $aNum in
#        1|2|3|4|5) echo "Your number is $aNum!"
#        ;;
#        *) echo "You do not select a number between 1 to 5, game is over!"
#            break
#        ;;
#    esac
#done


#break n n 标示跳出几层循环


for var1 in 1 2 3
do
   for var2 in 0 5
   do
      if [ $var1 -eq 2 -a $var2 -eq 0 ]
      then
         break 2
      else
         echo "$var1 $var2"
      fi
   done
done


# continue 
NUMS="1 2 3 4 5 6 7"


for NUM in $NUMS
do
   Q=`expr $NUM % 2`
   if [ $Q -eq 0 ]
   then
      echo "Number is an even number!!"
      continue
   fi
   echo "Found odd number"
done


#函数
function number_on(){
echo "number_on_function";
}
number_on
#给函数传参 $1 $2 标示第一个和第二个参数 $10 不标示第十个参数需要用 ${10}
function number_tow(){
echo "The value of the first parameter is $1 !"
    echo "The value of the second parameter is $2 !"
    echo "The value of the tenth parameter is $10 !"
    echo "The value of the tenth parameter is ${10} !"
    echo "The value of the eleventh parameter is ${11} !"
    echo "The amount of the parameters is $# !"  # 参数个数
    echo "The string of the parameters is $* !"  # 传递给函数的所有参数
}
number_tow 1 2 3 4 5 6 7 8 9 34 73




#case 用法
aNumc=3
case $aNumc in
    1)  echo 'You select 1'
    ;;
    2)  echo 'You select 2'
    ;;
    3)  echo 'You select 3'
    ;;
    4)  echo 'You select 4'
    ;;
    *)  echo 'You do not select a number between 1 to 4'
    ;;
esac
#结束脚本
exit 0
0 0
原创粉丝点击