参数数量
#!/bin/bash
echo "$#" #参数数量
echo "${$#}" # 输出打印了当前的进程ID?
echo "${!#}" #打印最后一个参数
ps
获取所有参数
#!/bin/bash
echo "两者都是获取所有数据"
echo "Using the \$* method:$*"
echo "Using the \$@ method:$@"
echo "区别"
for par in "$*"
do
echo -n "\$*:$par "
done
echo ""
for par in "$@"
do
echo -n "\$@:$par "
done
echo ""
输出(均添加双引号):
两者都是获取所有数据
Using the $* method:aa bb dd ee
Using the $@ method:aa bb dd ee
区别
$:aa bb dd ee
$@:aa $@:bb $@:dd $@:ee
输出(均不添加双引号)
两者都是获取所有数据
Using the $ method:aa bb dd ee
Using the $@ method:aa bb dd ee
区别
$:aa $:bb $:dd $:ee
$@:aa $@:bb $@:dd $@:ee
移动变量 shift
#!/bin/bash
count=1;
while [ -n "$1 " ] #test -n the length of the str is not zero
#若$1没有双引号 或是引号内存在空格 则会死循环
do
echo "Parameter:$count: $1"
shift
count=$[$count+1]
done
shift移除参数后无法恢复
shitf -n 指定移除的数目
命令选项
#!/bin/bash
while [ -n "$1" ] #同样的错误! $1双引号
do
case $1 in
-a )
echo " You choose -a opt!" ;;
-b )
echo "You choose -b opt!" ;;
-c )
echo "You choose -c opt!" ;;
* )
echo "invalid opt!" ;;
esac
shift #shift移除判断过的变量 控制循环结束
done
getopt选项处理
获取用户输入
#!/bin/bash
# -p 添加提示符 多变量的分配
read -p "enter your name:" name1 name2 name3
echo "1name=${name1} 2name=${name2} 3name=${name3} "
#!/bin/bash
read -t 3 -p "input you str:"
echo "$REPLY"
read 命令的退出码 超时设置
#!/bin/bash
if read -t 3 -p "please input your input:" name
then
echo "you had input your name : $name!"
else
echo -e "\n你的退出码为:$?"
echo -e "\nWhat's your fucking name ?"
fi
read -s (输入不显示,其实是将输入字符颜色设置为与背景一致) -na (输入a个字符后自动结束输入)
#!/bin/bash
read -s -n1 -p "Do you want to continue:" cas
echo ""
case $cas in
Y | y )
echo "You choose to continue!";;
N | n )
echo "You choose to break!";;
* )
echo "What's the fucking input!";;
esac
从文件中读取
cat 从文本输出数据时,会输出空行 while同样会处理空行
但是 for 不会
#!/bin/bash
count=1
file=$1
cat $file | while read "line"
do
echo "$count:: $line"
count=$[$count+1]
done