输出
echo
注释以#开头,但唯独第一行不是注释,他代表当前shell的类型,下面写一个小例子
#!/bin/bash
#直接写命令
#输出当前时间
date
#输出当前用户信息
who
#创建变量,变量和等号之间不能有空格,当字符串之间没有空格时可以直接赋值,有空格的要加双引号
str1=i
str="$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
命令执行推出的状态
- 0成功
- 127 没有找到命令
- 1 位置错误
- 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
doecho $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