参考资料
博客园
-
基础命令
# 打印 如果字符串中间有空格, 需要加上"". 单引号会使变量不起作用
echo str
echo "变量 $param"
# 将字符串作为命令执行
echo $(pwd)
echo `ls -al`
# 查看帮助
man bc
-
变量
定义变量
变量的赋值=
两侧不能有空格
变量的使用在变量名前加$
a=2
echo $a
-
运算符
与其他语言类似
运算符两边有空格, 一些运算符, 如'*', 需要转义 `*'
nu0=2
nu1=3
echo $nu0 \* $nu1
-
整数运算
num0=1
num1=2
# 第一种方法
expr $num0 + $num1
# 第二种方法
echo $[num0+num1]
-
浮点数运算
管道10 /3
这里的解释不明白?
# '|'管道将上一个命令的执行结果作为下一个命令的参数
# bc是bash的计算器
echo "scale=2; 10 / 3" | bc
-
判断语句
if-then-else-fi
# 注意command这里是命令
# 命令正常退出状态码为0, 反之非0
if command
then
comands
# if语句结束
fi
变形语句
if-then-elif-then-else-fi
test命令
- 用于整数比较, 浮点数
?
比较符 -eq -ne -gt -ge -lt -le
nu0=1
nu1=2
# 第一种方法
if test $nu0 -lt $nu1
then
echo nuo小于nu1
fi
# 第二种方法 (( expression )), 注意括号内侧的空格
if (( nuo < nu1 ))
#if(( $nuo < $nu1))
then
echo nuo小于nu1
fi
- 用于字符串比较
字符串比较符 = < > !=,-n(长度非0),-z(长度是0), 注意需要转义><
str1=test
str2=test
#第二种方法, 注意比较符之间的空格, 不能去掉$
if [[ $str1 = $str2 ]]
then
echo 两个相等
fi
- 用于文件比较
?
case语句
num=2
case $num in
1)
echo 1;;
*)
echo 2;;
esac
-
循环语句
for - do-done
for var in a b c d
do
echo $var
done
修改分隔符
在for var in list中list默认以空格分隔,如果需要以','分隔, 需要修改$IFS
$','
和','
用比较语句似乎是一样的, echo $IFS
无结果?
for var in a,b,c该句在修改后仍然输出a,b,c?
oldIFS=$IFS
IFS=","
list=a,b,c
for var in $list
do
echo $var
done
IFS=$oldIFS
c语言式for
for (( i=0; i < 10; i++ ))
do
echo $i
done
while,until
a=2
#whle test condition
while [ $a -le 2]
do
echo '爱吃'
# break可以加数字, 当前循环为1, 再外一层循环2
break
done
#或者
while (( $a <= 2 ))
#...
-
获得用户的输入
read 加参数, 用户输入将存入指定的变量中.多余的将会存入最后一个变量中
#-n 不换行输入
echo -n "how are you"
read answer
echo $answer
#多个参数
read -p "what do you like?" money girls
echo $girls
不加参数, 默认变量$REPLY
设置超时
if read -t 4 "i am happy"
then
echo 'yes'
else
echo timeout
fi
-
获取命令参数
$1
第几位参数
${10}
超过9
echo "filename: $0"
echo "base filename: $(basename $0)"
echo "$1"
echo "${2}"
$#
参数的数量
for (( index=0; index <= $#; index++))
do
# echo ${$index}错误{}中不能用$, 用!表示
echo ${!index}
done
$*
参数整体作为一个字符串
$@
参数分隔成多个字符
# 这里需要放入""中, 否则因为for会将字符串按空格分隔
for para in "$*"
do
echo $para
done
for para in "$@"
do
echo $para
done