第一种:采用bash或sh+脚本的相对路径或绝对路径(不用赋予脚本+x权限)
第二种:采用输入脚本的绝对路径或相对路径执行脚本(必SEO靠我须具有可执行权限+x)
显示shell中所有变量:set
说明:在终端输入sh进入到shell交互式界面,当SEO靠我然也可以直接在黑屏终端下操作测试,使用exit回退到终端
$nn为数字,$0代表该脚本名称,SEO靠我$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}
sh-4.2$ vim test2.sh sh-4.2$ chmod u+x test2.sh SEO靠我 sh-4.2$ ./ sh: ./: 是一个目录 sh-4.2$ ./test2.sh 1 2 3 4 5 6 7 8 9 10 文件夹的名字是 :.SEO靠我/test2.sh 第一个参数:1 第二个参数:2 第三个参数:3 第四个参数:4 第五个参数:5 第六SEO靠我个参数:6 第七个参数:7 第八个参数:8 第九个参数:9 第十个参数:10$*与$@: $*SEO靠我 功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
$@ 功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
$? : 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0,则证明上一个命令执行不正确了。
1 #!/bin/bash2 3 SEO靠我echo ------------$*--------------4 for i in $*5 do6 # echo "(带引号)i的值为:$i" 7 echo "(不带引号)i的值为:" $i8 dSEO靠我one9 10 11 echo ------------$@--------------12 for j in $@13 do14 # echo "(带引号)j的值为:$j" 15 echo "(不带SEO靠我引号)j的值为:" $j16 done sh-4.2$ sh test12.sh 1 2 3 ------------$*-------------- SEO靠我 (不带引号)i的值为: 1 (不带引号)i的值为: 2 (不带引号)i的值为: 3 ------------$@-------------- SEO靠我 (不带引号)j的值为: 1 (不带引号)j的值为: 2 (不带引号)j的值为: 3 sh-4.2$ vim test12.sh SEO靠我 ------------$*-------------- (不带引号)i的值为: 1 2 3 ------------$@-------------- SEO靠我 (不带引号)j的值为: 1 (不带引号)j的值为: 2 (不带引号)j的值为: 31 #!/bin/bash2 3 echo ------------$*----SEO靠我----------4 for i in "$*"5 do6 # echo "(带引号)i的值为:$i" 7 echo "(不带引号)i的值为:" $i8 done9 10 11 echo -----SEO靠我-------$@--------------12 for j in "$@"13 do14 # echo "(带引号)j的值为:$j" 15 echo "(不带引号)j的值为:" $j16 doneSEO靠我选项值:
-p 指定读取值时的提示符
-t 指定读取值时等待的时间(秒)
1 #!/biSEO靠我n/bash2 3 4 read -p "请输入第一个参数:" num15 6 echo "您输入的第一个参数是 $num1 "7 8 9 read -t 3 -p "请在3秒内输入第二个参数:" nSEO靠我um210 11 echo "您输入的第二个参数是 $num2"-lt:小于(less than)
-le:小于等于(less equal)
-eq:等于(equal)
-ne:不等于(not equal)
-gt:大于(greSEO靠我ater than)
-ge:大于等于(greater equal)
-r:有读的权限(read)
-w:有写的权限(write)
-x:-x 有执行的权限(execute)
sh-4.2$ eSEO靠我cho [ -r test3.sh ] [ -r test3.sh ] sh-4.2$ [ -r test3.sh ] sh-4.2$ echo $? SEO靠我 0 sh-4.2$ [ -x test3.sh ] sh-4.2$ echo $? 1 sh-4.2$ ls -l SEO靠我 总用量 16 -rwxrw-r--. 1 atguigu atguigu 33 11月 21 20:59 helloworld.sh -rwxrw-r--.SEO靠我 1 atguigu atguigu 64 11月 21 21:20 test01.sh -rwxrw-r--. 1 atguigu atguigu 331 11月 21 21:26 SEO靠我test2.sh -rw-rw-r--. 1 atguigu atguigu 210 11月 21 21:41 test3.sh按照文件类型判断:
-f:文件存在并且是一个常规的文件(fSEO靠我ile)
-d:文件存在并是一个目录(directory)
-e:文件存在(existence)
sh-4.2$ [ -f test] test01.sh test2.sh test3.shSEO靠我 test4.sh/ sh-4.2$ [ -f test3.sh ] sh-4.2$ echo $? 0 sh-4.2$ [ -d teSEO靠我st4.sh ] sh-4.2$ echo $?-a、-o、!:在中括号内使用
&&、||、!:在中括号外使用,计算多个中括号中的条件判断
sh-4.2$ [ -r test4.sSEO靠我h -a -w test4.sh -a -x test4.sh/ ] sh-4.2$ echo $? 0 sh-4.2$ ls -l 总SEO靠我用量 16 -rwxrw-r--. 1 atguigu atguigu 33 11月 21 20:59 helloworld.sh -rwxrw-r--. 1 atguSEO靠我igu atguigu 64 11月 21 21:20 test01.sh -rwxrw-r--. 1 atguigu atguigu 331 11月 21 21:26 test2.sSEO靠我h -rw-rw-r--. 1 atguigu atguigu 210 11月 21 21:41 test3.sh drwxrwxr-x. 2 atguigu atguSEO靠我igu 6 11月 21 21:48 test4.sh -rwxrw-r--. 1 atguigu atguigu 33 11月 21 20:59 helloworld.sh SEO靠我 -rwxrw-r--. 1 atguigu atguigu 64 11月 21 21:20 test01.sh -rwxrw-r--. 1 atguigu atguigu 33SEO靠我1 11月 21 21:26 test2.sh -rw-rw-r--. 1 atguigu atguigu 210 11月 21 21:41 test3.sh drwxSEO靠我rwxr-x. 2 atguigu atguigu 6 11月 21 21:48 test4.sh sh-4.2$ [ -r test4.sh/ ] && [ -w test4.sh/SEO靠我 ] && [ -x test4.sh/ ] sh: [: 参数太多 sh-4.2$ [ -r test4.sh ]&&[ -w test4.sh ]&&[ -x teSEO靠我st4.sh/ ] sh: [: 参数太多 sh-4.2$ [ -r test4.sh/ ] && [ -w test4.sh/ ] sh-4.2$ eSEO靠我cho $? 0 sh-4.2$ [ -r test4.sh/ ]&&[ -w test4.sh/ ] sh-4.2$ echo $?if [ 条件判断式 ]
then
语句
fi 1 #!/bin/bash2 3 read -t 3 -p "请在三秒内输入输入一个数 :" num4 5 echo "您输入的数为 $num SEO靠我"6 7 if [ $num -gt 10 ]8 then9 echo "恭喜您输入正确"10 fiif [ 条件判断式 ]
then
语句1
else
语句2
fiif [ 条件判断式1 ];then
语句1
elif [ 条件判断式2 ];then
语句2
elif [ 条件判断式3 ];then
语句3
……
else
语句e
fi 1 #!/bin/basSEO靠我h2 3 read -t 3 -p "请在三秒输入一个数字" num4 5 echo "您输入的数字为 $num"6 7 if [ $num -gt 10 ];8 then9 echo "您输入的值大SEO靠我了"10 elif [ $num -lt 10 ]11 then12 echo "您输入的值小了"13 else14 echo "恭喜您猜对了"15 fi语法:
case $变量名SEO靠我 in
"值1")
语句1
;;
"值2")
语句2
;;
……
*)
语句*
;;
esac1 #!/bin/bash2 3 read -t 3 -p "请在三秒内选在一个数字[1-7]" num4 5 case $nuSEO靠我m in6 "1")7 echo "星期一"8 ;;9 "2")10 echo "星期二"11 ;;12 "3")13 echo "星期三"14 ;;15 "4")16 echo "星期四"17 ;;SEO靠我18 "5")19 echo "星期五"20 ;;21 "6")22 echo "星期六"23 ;;24 "7")25 echo "星期日"26 ;;27 esacwSEO靠我hile [ 条件判断式 ]
do
语句
done 1 #!/bin/bash2 3 num=14 result=05 while [ $num -le 100 ]6 do7 result=$[$num+$rSEO靠我esult]8 num=$[$num+1]9 done10 echo "1-100内数的和为:$result" 1 #!/bin/bash2 3 4 num=15 sum=06 whSEO靠我ile [ $num -le 100 ]7 do8 sum=$(($num+$sum))9 num=$[$num+1]10 done11 echo "1-100的和为 $sum"for 变量 in 计算值1 计算值2 计算值SEO靠我3 ……
do
语句
done 1 #!/bin/bash2 3 4 #按顺序遍历in后面的所有“计算值”5 a=16 b=27 for i in 中 华 ren min 共 he guo Chinese8 SEO靠我do9 echo i的值为 $i10 done与java一样
1 #!/bin/bash2 3 echo "----------------break----------SEO靠我---------"4 for ((i=1;i<=10;i++))5 do6 if [ $i -eq 5 ]7 then8 break9 fi10 echo "i的值为:$i"11 done12 13SEO靠我 echo "----------------continue-------------------"14 15 for ((i=1;i<=10;i++))16 do17 if [ $i -eq 5 SEO靠我]18 then19 continue20 fi21 echo "i的值为:$i" 22 done23基本语法:basename [string/pathnamSEO靠我e] [suffix]
basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来
选项suffix:如果suffix被指定了,basename会将pathname或stringSEO靠我中的suffix去掉
sh-4.2$ basename /a/b/c/d/e.txt e.txt sh-4.2$ basename /a/b/c/d/e.txt .txtSEO靠我 e sh-4.2$ basename /a/b/c/d/e.txt txt基本语法:dirname 文件绝对路径
功能描述:从给定的包含绝对路SEO靠我径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)
sh-4.2$ dirname /a/b/c/d/e.txt /a/b/c/d sh-4.2$[function] funname [()]
{
action;[return int;]
}function说明定义SEO靠我函数,可以省略funname自定义函数名,遵循标识符规则()可以省略,和function不能同时省略action封装的功能return int函数返回值,只能通过$?系统变量来获取,可以显示添加。如果SEO靠我不添加,将以最后一条命令运行的结果作为返回值。注意return后的数值在[0~255]之间,如果超过255,将返回该值与256的余数。;语句结束标志,可以不写funname [SEO靠我……]
echo "函数的返回值为:$?" funname要调用的函数名……传递参数,如果无需传参即省略$?获取函数的返回值""需要使用双引号,可以使用特殊变量网站备案号:浙ICP备17034767号-2