Linux之shell(三),shell的编写一

来源:互联网 发布:网络层设备 编辑:程序博客网 时间:2024/06/13 09:19

read -p :提示符

声明变量,declare -i total=$firstnu*$secnu ; //表明是数值型,否则默认是字符串

可以使用var = $(( 运算内容 ))来计算,如echo $(( 13 % 3 )), 小括号内可以有空格,$与(必须挨着

script的执行方式区别:

1 直接执行:./shxx.sh,当前的bash生成一个子进程,然后shell文件在子进程内运行,所以程序中设置的变量父进程不可见

2 source脚本:在父进程中执行,共享变量,如下图


判断一个文件是否存在

ls xlf && echo "exist" || echo "not exist"test -e xlf && echo "exist" || echo "not exist"以上执行正确如果是以下则出现问题ls xlf || echo "not exist" && echo "exist"
因为 && 与 || 的执行条件如下:

      所以对于ls xlf || echo "not exist" && echo "exist"  : 首先如果xlf不存在,则ls xlf返回非0,||后 echo "not exist"执行,返回0,因为它返回0,所以 &&执行输出echo "exist".要注意顺序,一般是 && 再 ||

       测试的条件判断:

 

以下练习scripts:

#/bin/bash#输入用户名,判断文件是否存在,不存在输出信息,程序退出#若存在,则输出是文件还是目录#再判断以下,执行者的身份对这个文件或目录所拥有的权限,并输出权限数据read -p "please input a filename: " filenametest -z $filename && echo "You must input a filename." && exit 0;test ! -e $filename && echo "not exist" && exit 0test -f $filename && echo "$filename is a regular file"test -d $filename && echo "$filename is a directory"test -r $filename && echo "$filename is readalbe"test -w $filename && echo "$filename is writeable"test -x $filename && echo "$filename is execable"

       利用中括号也可以进行判断 : [ _"$xxx" _==_ "$xxx"_], _表示空格,中括号两端需要有空格符来分割,上面test所有的判断规则都可以适用,常用在if...then...fi中,使用时需要注意如下内容:

     1 在中括号[]内的每个组件都需要有空格键来分割

     2 在中括号内的变量,最好以双引号括起来

    3 在中括号内的常量,最好以单引号或双引号括起来。  

     如下例子:

#/bin/bash#让程序输入y或n,对于两种情况分别输出提示信息,#利用[]进行判断,如果不是Y/y/N/n,则显示错误read -p "please input(Y(y) or N(n)): " response[ "$response" == 'Y' -o "$response" == 'y' ] && echo "OK continue" && exit 0[ "$response" == 'N' -o "$response" == 'n' ] && echo "Oh, interrupt!" && exit 0echo "I don;t know what your choice is" && exit 0

shell script的默认变量

$0:程序名,$1:第1个参数 $2:第2个参数....

$#: 代表后接的参数个数

$@: 代表“$1” “ $2” “ $3” “$4”,全部的变量,每个变量是独立的,

$*: 代表“ “$1c$2c$3c$4” ”  , c表示的分割符,默认是空格,也是全部的变量,

以下使用例子:

#/bin/bash#执行脚本后显示程序名,共有几个参数,若参数个数小于2,则参数太少,然后输出全部参数内容echo "脚本名称:$0"echo "总共$#个参数"[ $# -lt 2 ] && echo "参数太少" && exit 0echo "全部参数:$@  $*"echo "第一个参数:$1"echo "第二个参数:$2"

shift: 造成参数变量号码右移,如下:

#/bin/bash#执行脚本后显示程序名,共有几个参数,显示shift的功能echo "脚本名称:$0"echo "总共$#个参数"echo "全部参数:$@ "shift   #进行一次变量向右移动echo "总共$#个参数"echo "全部参数:$@ "shift 3  #变量向右移动三个echo "总共$#个参数"echo "全部参数:$@ "



0 0
原创粉丝点击