什么是shell?
命令解析器,将用户输入的指令转化为机器可运行程序
#!/bin/sh 或 #!/bin/bash 声明这是shell脚本,固定格式
重定向符
> 原内容被擦除
>> 原内容不被擦除,而是在后面添加
默认变量
$# 传入脚本命令行形参个数
$* 所有命令行的参数值,在各个参数值之间留有空格
$0 本身
$1 第一个参数
$2 第二个参数
if语句
if [ $# -ne 3 ]; then 如果不等于3
elif [ $# -eq 3 ]; then 如果等于3,可替换为else
fi
☆☆☆[]里面要有空格
for语句
for dir in $1 $2 $3
do
done
iffor.sh
#!/bin/bash
echo "hello world"
if [ $# -ne 3 ]; then
echo"Usage: $0 dirname1 dirname2 dirname3"
exit 1 ------------>便于定位程序出错位置
else
echo $1
echo $2
echo $3
echo $*
fi
for dir in $1 $2 $3
do
mkdir ${dir}
cd ${dir}
touch ${dir}.txt
echo "hello world" > ${dir}.txt
cd ..
done
orand.sh
#!/bin/bash
folder=/home
[ -r "$folder" ] && echo "can read name1 $folder"
[ -r "$folder" ] && echo "can read name2 $folder"
[ -f "$folder" ] || echo "this is not file3"
[ -f "$folder" ] || echo "this is not file4"
运行结果:
can read name1 /home
this is not file 4
与&&:若前面为真则后面运行
或||:若前面为真则后面不运行
case.sh
#!/bin/bash
export LC_ALL=C --------->①解决无法判断字母大小写的问题
read key
case ${key} in
[A-Z] ) echo "Uppercase Letter";;
[a-z] ) echo "Lowercase Letter";;
[0-9] ) echo "Nunber";;
* ) echo "Unknow";
esac
②判断条件改动
[A-Z]改为[[:upper:]]
[a-z]改为[[:lower:]]
问题原因:不同语系中编码的顺序不一样