分割线
在shell脚本中,通过设置IFS
来确定分割线。例如:
#!/bin/bash
IFS=:
for val in $PATH
do
echo "$val:"
for file in $val/*
do
if [ -x $file ]
then
echo " $file"
fi
done
done
输入参数
在使用0-9的参数通过$0-$9
表示,而10之后的数据则需要通过类似${10}
格式。
#!/bin/bash
if [ -n "$1" ]
then
echo "has data"
else
echo "no data"
fi
特殊变量$#
含有脚本运行时携带的命令行参数的个数
#!/bin/bash
echo "$#"
使用${!#}
来获取最后一个参数
#!/bin/bash
echo "${!#}"
$*
变量会将命令行上提供的所有参数当作一个单词保存。
$@
变量会将命令行上提供的所有参数当作同一字符串中的多个独立的单词。
#!/bin/bash
for val in "$*"
do
echo "$val"
done
echo "next"
for val in "$@"
do
echo "$val"
done
shift
命令会根据它们的相对位置来移动命令行参数.在使用shift命令时,默认情况下它会将每个参数变量向左移动一个位置。所以,变量$3
的值会移到$2
中,变量$2
的值会移到$1
中,而变量$1
的值则会被删除(变量$0
的值,也就是程序名,不会改变)
#!/bin/bash
count=1
while [ -n "$1" ]
do
echo "Parameter #$count = $1"
count=$[ $count + 1 ]
shift
done
#!/bin/bash
while [ -n "$1" ]
do
case "$1" in
-a) echo "Found the -a option";;
-b) echo "Found the -b option";;
--)shift
break;;
*)echo "$1 is not an option";;
esac
shift
done
#
count=1
for param in $@
do
echo "Parameter #$count:$param"
count=$[ $count + 1 ]
done
read命令获取用户输入
read将读取的内容存储在变量中
#!/bin/bash
echo -n "Enter you name:"
read name
echo "$name welcame"
可以通过q
来对需要的内容进行解释
#!/bin/bash
read -p "Enter you name:" name
echo "$name welcame"
通过t
来限制输入时间
#!/bin/bash
if read -t 5 -p "Enter you name:" name
then
echo "$name welcame"
else
echo
echo "Sorry slow"
fi
通过s
来实现隐形输入
#!/bin/bash
read -s -p "Enter you name:" name
echo
echo "$name welcame"