以下规则以bash为准!
输入sudo dkpg-reconfigure dash,在跳出的窗口中会提示是否使用dash为默认shell,选No就好了,这样就变成用bash了。
可以按如下方式查看目前使用的是哪种shell。
root@ubuntu:/home/user/shell# echo $0
bash
root@ubuntu:/home/user/shell# echo $SHELL
/bin/bash
#!/bin/sh a=1 echo $a echo '$a' echo "${a}is 1"
1 $a 1is 1
#!/bin/sh DATE=`date` echo "Date is $DATE" LS=`ls -l` echo Ls "$LS"
user@ubuntu:~/shell$ ./var.sh Date is Sun Aug 30 03:02:41 PDT 2015 Ls total 8 -rwxrwxr-x 1 user user 30 Aug 30 02:18 first.sh -rwxrwxr-x 1 user user 68 Aug 30 03:02 var.sh
#!/bin/sh a=1 b=1 val=`expr $a + $b` echo "$a + $b is $val" val=`expr 1+2` echo "1+2=" $val val=`expr 1 + 2` echo "1 + 2=" $val val=`expr 1 - 2` echo $val val=`expr 1 / 2` echo $val val=`expr 1 * 2` echo "1 * 2=" $val val=`expr 1 \* 2` echo "1 \* 2= $val" if [ $a = $b ] then echo "$a == $b" fi if [ $a != $b ] then
user@ubuntu:~/shell$ ./var.sh 1 + 1 is 2 1+2= 1+2 1 + 2= 3 -1 0 expr: syntax error 1 * 2= 1 \* 2= 2 1 == 1
#!/bin/sh a=1 echo -e '$a test\n' echo -e "$a test\n" echo -e $a \\n str="abc"123"d\n" echo $str echo -e $str "abc"看吧,都换行了,加-e选项就可以换行啦,如果不加呢?可以试试看哦!
$a test 1 test 1 abc123d\n abc123d abc
#!/bin/sh str1="I am str1" length=${#str1} echo "str length is : "$length endindex=`expr ${length} - 1` echo "extracting the substr of \"${str1}\" from index 1 to ${endindex} or `expr 1 + 1`" substr1=${str1:1:${endindex}} substr2=${str1:1:`expr 1 + 1`} echo $substr1 echo $substr2 echo "searching ${str1} with the word \"am\", finded in index `expr index "$str1" am`" echo `expr index "I am abc" am`
str length is : 9 extracting the substr of "I am str1" from index 1 to 8 or 2 am str1 a searching I am str1 with the word "am", finded in index 3 3
#!/bin/sh str1="I am str1" str2="prev"${str1}"next" num=12 str3='p'${str1}${num}'n' str4="p" ${str1} "n" echo $str2 echo $str3 echo $str4从结果可以看出,字符串可以拼接双引号或单引号包围的字符串以及各种变量,但是两个拼接对象直接不能存在空格,必须紧密联系在一起!!!
user@ubuntu:~/shell$ ./test.sh ./test.sh: line 6: I: command not found prevI am str1next pI am str112n user@ubuntu:~/shell$
#!/bin/sh printf "%s %d \n" "str" 12 printf %d 23 34 45 "str" printf '\n%s %d\n' "str" 12 printf '%s %s \n' "str1" "Str2" "ab" "cd" "e" printf "default str is %s default num is %d\n"
str 12 ./test.sh: line 3: printf: str: invalid number 2334450 str 12 str1 Str2 ab cd e default str is default num is 0
#!/bin/sh array=(1 2 3 "ab") array[8]="123" echo ${array[0]} echo ${array[8]} echo ${array[*]} echo ${array[@]} len=${#array[*]} echo "array length is ${len}" echo "${array[8]} length is ${#array[8]}" echo "${array[3]} length is ${#array[3]}"
1 123 1 2 3 ab 123 1 2 3 ab 123 array length is 5 123 length is 3 ab length is 2
array=(1 2 3 "ab") array[8]="123" array["a"]="a" array["c"]="c" array["b"]="b"
#!/bin/sh a=1 b=3 c=1 if [ $a == $c ] then echo "$a == $c" fi if [ $a == $b ] then echo "$a == $b" elif [ $a -gt $b ] then echo "$a is greater than $b" elif [ $a -lt $b ] then echo "$a is less than $b" else echo "~~~~" fi
if test $a -eq $c then echo "$a == $c" fi
1 == 1 1 is less than 3 1 == 1
#!/bin/sh echo -e "Please input a number or letter:\c" read num case $num in [1-9]) echo "the num is <= 10" ;; [a-z]|[A-Z]) echo "it is a letter" ;; *) echo "the input is **" ;; esac
#!/bin/sh for var in 1 2 3 4 5 do echo "loop num $var" done str0="" for str in 'ab' "cd" 'ef' do str0=${str0}" "${str} done echo $str0 echo "typing all the files in the data dir" for FILE in /home/user/data/* do echo ${FILE} done
loop num 1 loop num 2 loop num 3 loop num 4 loop num 5 ab cd ef typing all the files in the data dir /home/user/data/HTTP.dat /home/user/data/InverseIndex.jar /home/user/data/parTest.jar /home/user/data/result.dat /home/user/data/testComp.jar
#!/bin/sh COUNTER=0 while [ $COUNTER -lt 5 ] do COUNTER=`expr $COUNTER + 1` echo $COUNTER done1
#!/bin/sh COUNTER=10 until [ $COUNTER -lt 5 ] do COUNTER=`expr $COUNTER - 1` echo $COUNTER done
#!/bin/sh for var1 in 1 2 3 4 do for var2 in 4 3 2 1 do if [ $var1 -gt $var2 -a ! $var1 -lt 2 ] then break; fi echo "var1 and var2 are : "${var1}" "${var2} done done
var1 and var2 are : 1 4 var1 and var2 are : 1 3 var1 and var2 are : 1 2 var1 and var2 are : 1 1 var1 and var2 are : 2 4 var1 and var2 are : 2 3 var1 and var2 are : 2 2 var1 and var2 are : 3 4 var1 and var2 are : 3 3 var1 and var2 are : 4 4
#!/bin/sh for var1 in 1 2 3 4 do for var2 in 4 3 2 1 do if [ $var1 -gt $var2 -a ! $var1 -lt 2 ] then break 2; fi echo "var1 and var2 are : "${var1}" "${var2} done donebreak 2 跳出第二层循环,所以if条件满足之后循环就会结束,这里写成break n(n>=2)都会跳出第二层循环的哦!
var1 and var2 are : 1 4 var1 and var2 are : 1 3 var1 and var2 are : 1 2 var1 and var2 are : 1 1 var1 and var2 are : 2 4 var1 and var2 are : 2 3 var1 and var2 are : 2 2
var1 and var2 are : 1 4 var1 and var2 are : 1 3 var1 and var2 are : 1 2 var1 and var2 are : 1 1 var1 and var2 are : 2 4 var1 and var2 are : 2 3 var1 and var2 are : 2 2 var1 and var2 are : 3 4 var1 and var2 are : 3 3 var1 and var2 are : 4 4
#!/bin/sh function fun(){ echo "I am a function" echo -n "read a number:" read a echo -n "read another number:" read b c=`expr $a + $b` return $(($a+$b)) } fun ret=$? echo $ret
#!/bin/sh myfun() { echo $0 echo $1 echo ${2} echo $3 echo "the wrong ten'th is "$10 echo "the right ten'th is "${10} echo "number of parameters is "$# echo "all "$* echo "all "$@ return 256 } myfun 2 3 4 5 a b cd ed cd aa dd echo "ret is "$?
./test.sh 2 3 4 the wrong ten'th is 20 the right ten'th is aa number of parameters is 11 all 2 3 4 5 a b cd ed cd aa dd all 2 3 4 5 a b cd ed cd aa dd ret is 0
root@ubuntu:/home/user/shell# ls > ls root@ubuntu:/home/user/shell# ls d.sh ls test.sh root@ubuntu:/home/user/shell# echo hi,baby >> ls root@ubuntu:/home/user/shell# cat ls d.sh ls test.sh hi,baby root@ubuntu:/home/user/shell# echo hi,baby > ls root@ubuntu:/home/user/shell# cat ls hi,baby
#!/bin/sh wc -w << del hi baby, I love you ohh I love you, too! del 10
<span style="font-size: 12.6315793991089px;"></span><pre name="code" class="javascript">test.sh #!/bin/sh fun(){ wc -w << del hi baby, I love you ohh I love you, too! del }
#!/bin/sh . /home/user/shell/test.sh fun