shell脚本简单语法

shell脚本的if elif 使用
#是注释的意思注意if语句的格式
if[];then
elif[];then
else
fi
-------------------------if elif -------------------------------
#!/bin/sh#注意if的空格以及[]里面的空格这里错了半天啊if [ "$SHELL" = "/bin/bash" ];thenecho "your login shell is the bash \n"echo "SHELL is : $SHELL"else echo "your login shell is not bash but $SHELL"fi
#[ -f "somefile" ] : 判断是否是一个文件#[ -x "/bin/ls" ] : 判断/bin/ls是否存在并有可执行权限#{ -n "$var" } : 判断$var变量是否有值#[ "&a" = "$b" ] : 判断$a和$b是否相等
# a && b 表示 a 执行成功则执行b
# a || b 表示 a 未执行成功则执行b
[ -f "/etc/shadow" ] && echo "This computer uses shadow passwords"if [ -f "/etc/shadow" ];thenecho "电脑密码使用隐藏字符"elseecho "并没有"fi

----------------------eg--------------------
#!/bin/sh#-r代表此文件是否可读mailfolder=/Users/yp-tc-m-7129/2017/a.txt#[ -r "$mailfolder" ] || { echo "Can not read $mailfolder" ; exit 1;}#echo "$mailfolder has mail from : "#grep "^echo " $mailfolderif [ -r "$mailfolder" ];then echo "$mailfolder has massage from : " echo | grep '^echo ' $mailfolder >> readme2.txt chmod +r readme2.txt cat readme2.txt >> $mailfolder rm -f readme2.txtelse echo "Can not read $mailfolder" touch $mailfolder chmod +rw $mailfolder echo "echo 人生自古谁无死,六区蛋清找旱情! " >> $mailfolderfi

-------------------------打印日期---------------
curdate="`date +%Y%m%d%H%M%S`"echo $curdate
执行结果:20110904175817

echo `date` | awk -F ' ' '{print $1 $2 $3}'
2017年7月11日星期二

--------------------------变量赋值------------------
显示文件行数
cat /etc/passwd | wc -l
line=1
count=`echo $line`
num=`$line`
hang=`cat a.sh | wc -l`
echo $count #1
echo $num #会报错
echo $hang #103


------------------------eg-----------------
#!/bin/bashfl=/etc/passwd
#下面表示查看文件,并计算文件的行数count=`cat $fl | wc -l`#下面是一个管道,下面循环读文件中的每一行cat $fl |while read linedo user=`echo $line|awk -F ':' '{print $1}'` #代表以 :分段$1就是取第1段 uid=`echo $line|awk -F ':' '{print $3}'` echo "hello, $user Your UID is $uid"doneecho "====User_count:$count===="#前面求得的用户数


-------------------eg---------------------
切换到指定目录,显示所有文件,并计算以-开头的文件数量
ls -l|grep '^-' 表示列出以-开头的文件详细信息
ls -l|grep '^-'|wc -l 表示列出以-开头的文件数量

#!/bin/bash
cd /tmp
for i in /tmp/*
do
    echo "Hello , $i"
done
count=`ls -l|grep '^-'|wc -l`
echo "====file_count:$count===="

-----------------------数字计算大于等于小于的写法-----------------
-eq相当于=, -ne相当于不等于, -ge 相当于>= , -gt 相当于>, -le 相当于<=, -lt 相当于<

#!/bin/basha=$1b=$2[ -z $a ] && echo "please \$1 number1" && exit 1[ -z $b ] && echo "please \$2 number2" && exit 2[ ! $# -eq 2 ] && echo "--please num1 num2" && exit 3# $#传递到脚本的参数个数# -eq相当于=, -ne相当于不等于, -ge >= , -gt >, -le <=, -lt <echo "$a + $b = $(($a+$b))"echo "$a - $b = $(($a - $b))"echo "$a * $b = $(($a*$b))"echo "$a / $b = $(($a/$b))"

-----------------------求前100个数的和用while或者for----------------
#/bin/bashi=1sum=0#whilewhile [ $i -le 100 ]do ((sum=sum+i)) #或者sum=$(($sum+$i)) ((i=i+1)) #或者 ((sum=sum+i))doneecho $sum

#forsum=0for ((j=1;j<=100;j++))do ((sum=sum+j))doneecho $sum

---------------------------switch----------
$@ 表示所有参数列表
#selectselect flag in $@do case $flag in $1)echo $1;; $2)echo $2;; $3)echo $3;; $4)echo $4;; *)echo "input error" break ;; esacdone

------------------------function-----------
#function
filename=""
rename(){
filename=myname
}
rename
echo -e "filename is $filename"
#表示执行结果正确就创建文件夹,如果文件夹创建不成功或者结果错误就输出error
[ $? == 0 ] && mkdir $filename || echo -e "have error\n"

--------------------$#,$1,$@等参数意义---------------------------
$?
最后运行的命令的结束代码(返回值)
$*
所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$@
所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$#
添加到Shell的参数个数
$0
Shell本身的文件名
$1~$n
添加到Shell的各参数值。$1是第1参数、$2是第2参数…。





猜你喜欢

转载自blog.csdn.net/zhangxiaomin1992/article/details/74942975