Shell 脚本

来源:互联网 发布:thething知乎 编辑:程序博客网 时间:2024/05/21 09:16

Shell变量

变量类型:

1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

变量定义

#!/binbash#定义变量hello="Hello Shell"#使用变量echo $helloecho ${hello}

Shell 字符串

引号区别

#单引号字符串的限制:#单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;#单引号字串中不能出现单引号(对单引号使用转义符后也不行)。str='hello shell'#双引号里可以有变量#双引号里可以出现转义字符word="ccj"strd="hello shells ${word}"

获取字符串长度

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

Shell 数组

Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小

#!/bin/bashmy_array[0]=Amy_array[1]=Bmy_array[2]=Cmy_array[3]=Decho "数组元素个数为: ${#my_array[0]}"#输出0的值echo "数组元素个数为: ${#my_array[@]}"#输出全部

Shell 传递参数

向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……

#脚本代码echo "Shell 传递参数实例!";echo "执行的文件名:$0";echo "第一个参数为:$1";echo "第二个参数为:$2";
#执行代码chmod +x test.sh ./test.sh 1 2 3Shell 传递参数实例!执行的文件名:./test.sh第一个参数为:1第二个参数为:2第三个参数为:3

Shell 运算符

原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
(注意使用的是反引号 ` 而不是单引号 ‘)

#!/bin/bashval=`expr 2 + 2`echo "两数之和为 : $val"
#!/bin/bash# func:基本运算a=10b=20val=`expr $a + $b`echo "a + b : $val"val=`expr $a - $b`echo "a - b : $val"val=`expr $a \* $b`echo "a * b : $val"val=`expr $b / $a`echo "b / a : $val"val=`expr $b % $a`echo "b % a : $val"if [ $a == $b ]then   echo "a 等于 b"fiif [ $a != $b ]then   echo "a 不等于 b"fi
#!/bin/bash# 字符串运算a="abc"b="efg"if [ $a = $b ]then   echo "$a = $b : a 等于 b"else   echo "$a = $b: a 不等于 b"fiif [ $a != $b ]then   echo "$a != $b : a 不等于 b"else   echo "$a != $b: a 等于 b"fiif [ -z $a ]then   echo "-z $a : 字符串长度为 0"else   echo "-z $a : 字符串长度不为 0"fiif [ -n $a ]then   echo "-n $a : 字符串长度不为 0"else   echo "-n $a : 字符串长度为 0"fiif [ $a ]then   echo "$a : 字符串不为空"else   echo "$a : 字符串为空"fi

Shell test命令

hell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

#!/bin/bash# 文件读写file="/usr/ccj/shell/shell_test.sh"if [ -r $file ]then   echo "文件可读"else   echo "文件不可读"fiif [ -w $file ]then   echo "文件可写"else   echo "文件不可写"fiif [ -x $file ]then   echo "文件可执行"else   echo "文件不可执行"fiif [ -f $file ]then   echo "文件为普通文件"else   echo "文件为特殊文件"fiif [ -d $file ]then   echo "文件是个目录"else   echo "文件不是个目录"fiif [ -s $file ]then   echo "文件不为空"else   echo "文件为空"fiif [ -e $file ]then   echo "文件存在"else   echo "文件不存在"fi
num1=100num2=100if test $[num1] -eq $[num2]then    echo '两个数相等!'else    echo '两个数不相等!'fiif test $[num1] -eq $[num2]then    echo '两个数相等!'else    echo '两个数不相等!'fiif test $[num1] -gt $[num2]then    echo 'num1大于num2!'fiif test $[num1] -ge $[num2]then    echo 'num1大于等于num2!'fiif test $[num1] -lt $[num2]then    echo 'num1小于num2!'fi

Shell 流程控制

sh的流程控制不可为空,如(以下为PHP流程控制写法),如果else分支没有语句执行,就不要写这个else。

if else

a=10b=20if [ $a == $b ]then   echo "a 等于 b"elif [ $a -gt $b ]then   echo "a 大于 b"elif [ $a -lt $b ]then   echo "a 小于 b"else   echo "没有符合的条件"fi

for 循环

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

Shell 函数

funWithReturn(){    echo "这个函数会对输入的两个数字进行相加运算..."    echo "输入第一个数字: "    read aNum    echo "输入第二个数字: "    read anotherNum    echo "两个数字分别为 $aNum$anotherNum !"    return $(($aNum+$anotherNum))}funWithReturnecho "输入的两个数字之和为 $? !"

Shell 文件包含

和其他语言一样,Shell 也可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的文件。

. filename   # 注意点号(.)和文件名中间有一空格source filename
1 0