首页 > 代码库 > shell

shell

shell--------------------------------------------------------------------------------------------------------------------------------
#!/bin/bash

分号是多个语句之间的分割符号,当只有一个语句的时候,末尾无需分号,最后一个语句后面也无需分号。

echo "What is your name?"
read PERSON   #stdin 获取输入并赋值给 PERSON 变量
echo "Hello, $PERSON" #双引号可有可无,单引号主要用在原样输出中。

1.变量 大小写敏感 注意空格
name=100
name="mozhiyan"
DATE=`date` #命令赋值
val=`expr 2 + 2` #表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2
val=`expr $a \* $b` #乘号(*)前边必须加反斜杠(\)才能实现乘法运算
echo $name
变量名和等号之间不能有空格

2.Shell特殊变量
$0    当前脚本的文件名
$n    传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$#    传递给脚本或函数的参数个数。
$*    传递给脚本或函数的所有参数。
$@    传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
$?    上个命令的退出状态,或函数的返回值。
$$    当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

$* $@ "$@":数组 "$*":字串

3.替换
echo -e "Value of a is $a \n" #这里 -e 表示对转义字符进行替换。如果不使用 -e 选项,将会原样输出
双引号里可以有变量
双引号里可以出现转义字符

${var:-word}    如果变量 var 为空或已被删除(unset),那么返回 word,但不改变 var 的值。
${var:=word}    如果变量 var 为空或已被删除(unset),那么返回 word,并将 var 的值设置为 word。

val=`expr 2 + 2`

if [ $a == $b ] #注意:条件表达式要放在方括号之间,并且要有空格,例如 [$a==$b] 是错误的,必须写成 [ $a == $b ]
then
   echo "a is equal to b"
fi

比较ref:
http://c.biancheng.net/cpp/view/2736.html

字符串
greeting="hello, "$name

string="abcd"
echo ${#string} #输出 4

string="alibaba is a great company"
echo ${string:1:4} #输出liba

string="ababa is a great company"
echo `expr index "$string" "ib"`
2 #查找子字符串中任一字符位置

NAME=(value0 value1 value2 value3)

NAME[0]="Zara"
NAME[1]="Qadir"
echo "First Index: ${NAME[0]}"
echo "Second Index: ${NAME[1]}"
//使用@ 或 * 可以获取数组中的所有元素,例如:
${array_name[*]}
${array_name[@]}
//取得数组元素的个数
length=${#array_name[@]} 或者 length=${#array_name[*]}
//取得数组单个元素的长度
lengthn=${#array_name[1]}

printf "%d %s\n" 1 "abc"

判断语句 if
if test $[2*3] -eq $[1+5]; then echo The two numbers are equal!; fi;
The two numbers are equal!

num1=$[2*3]
num2=$[1+5]
if test $num1 -eq $num2
then
    echo The two numbers are equal!
else
    echo The two numbers are not equal!
fi

echo Input a number between 1 to 4
echo Your number is:\c
read aNum
case $aNum in
    1)  echo You select 1
    ;;
    2)  echo You select 2
    ;;
    3)  echo You select 3
    ;;
    4)  echo You select 4
    ;;
    *)  echo You do not select a number between 1 to 4
        exit 1 # Command to come out of the program with status 1
    ;;
esac

for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done

a=0
while [ $a -lt 10 ]
do
   echo $a
   a=`expr $a + 1`
done

#until 循环执行一系列命令直至条件为 true 时停止。
a=0
until [ ! $a -lt 10 ]
do
   echo $a
   a=`expr $a + 1`
done

number_one () {
   echo "Url_1 is http://see.xidian.edu.cn/cpp/shell/"
   number_two
}
number_two () {
   echo "Url_2 is http://see.xidian.edu.cn/cpp/u/xitong/"
}
number_one

$command > file 2>&1

#将外部脚本的内容合并到当前脚本,被包含脚本不需要有执行权限。
source filename

 

shell