shell脚本和流程控制

来源:互联网 发布:淘宝做食品要什么条件 编辑:程序博客网 时间:2024/05/23 22:17

输出

echo

注释以#开头,但唯独第一行不是注释,他代表当前shell的类型,下面写一个小例子

#!/bin/bash#直接写命令#输出当前时间date#输出当前用户信息who#创建变量,变量和等号之间不能有空格,当字符串之间没有空格时可以直接赋值,有空格的要加双引号str1=istr="$str1 love you"#命令的结果作为变量值,一种是反引号中间写命令,一种是$(),括号中间写命令text1=`date`text2=$(who)#输出当前变量值,echo $加变量名echo $text1#如果输出特殊字符,需要用\转义

grep命令查找
bash在当前脚本出现的位置,-n表示当前行数

#输出为#!/bin/bash
grep bash linux.sh
grep -n bash linux.sh
#输出为1:#!/bin/bash

命令执行推出的状态

  1. 0成功
  2. 127 没有找到命令
  3. 1 位置错误
  4. 126 命令不可执行

if else语句
格式
只有if命令的退出状态码为0才会执行then部分

if 命令
then
  命令
fi

例子

tesure=lady
#查找passwd里面是否有对应的目录
if grep $tesure /etc/passwd
then
  echo “ok”
#如果passwd没有这个目录,在判断是否有这个目录
elif ls -d /home/¥tesure
then
  echo ”用户不存在,但主目录仍然存在“
#其他情况
else
#可以继续嵌套if
  echo “not exit”
fi

test 命令,如果条件成立,test命令以状态0退出,if条件成立,不成立以非0退出
test 条件
test命令的简写为[ 条件 ]注意条件与中括号之间的空格

#!/bin/bash
if [ 10 -eq 10]
then
  echo “相等”
else
  echo “不相等”
fi

test数值的比较

  • -gt大于
  • -eq等于
  • -le小于
  • -ne不等于

test字符串的比较

  • str1==str2等于
  • str1!=str2不等于
  • str1< str2小于 比较的是阿斯克码
  • -n str1长度是否非0
  • -z str1长度是否为0

test文件比较

  • -d检查是否存在并且是一个目录
  • -e检查file是否存在
  • -f检查是否存在并且是一个文件
  • -r检查是否存在,并且可读,类似还有-w,-x
  • file1 -nt file2 file1比file2新
  • file -ot file2 file1比file2旧

#!/bin/bash
mydirr=/usr/linux
#-d检查目录是否存在
if[ -d $mydir ]
then
  echo”存在”
ls
else
 echo“不存在”
fi

多个条件的是时候

if[ ]&&[ ]

如何使用任意数学赋值或者比较表达式++,–,=,>,<,==,||等符号,用双括号包围表达式

if(( a++ >90 ))
。。。

case 语句
格式,注意双引号

case 命令
case 变量 in
patt1) 命令;;
pqtt2) 命令;;
*) 默认命令;;
esac

例子

#!/bin/bash
tes=good
case $tes in
good)
  echo “hi”;;
*)
  echo “jjj”;;
esac

for循环
格式

for 命令
for var in list
do
  命令
done

例子

#!/bin/bash
for item in 1 2 3 4 5
do
echo $item
done
#输出为1 2 3 4 5

例子

list=“win–hhh–sfsf-fsdf”

字段分隔符IFS

IFS=$- -

for item in $list
do

  echo $item
done
#输出为win hhh sfsf fsdf

while 循环
格式

while test命令或者【】
do
命令
done

例子

#!/bin/bash
a=10
while [ $a -gt 0 ]
do
 echo “1”
赋值不用使用美元符号

 a=[ $a-1]
done

原创粉丝点击