标签:自学linux 开头 roo comm lin 不同 export 进入 退出
Shell脚本的执行通常可以采用以下几种方式:
1):bash script-name或sh script-name(推荐使用)
2):path/script-name 或./script-name(当前路径下执行脚本)
3):source script-name或 . script-name #→注意”.”点号。
4):sh<script-name或cat scripts-name|sh(同样适合bash)
定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:
your_name="runoob.com"
变量名的命名须遵循如下规则:
1.普通变量:
1.1 环境变量:变量必须是大写
1.2 环境变量的意义:
1.3 局部变量:
[root@centos6 ~]# a=‘$USER‘
[root@centos6 ~]# echo $a
$USER
[root@centos6 ~]# a=1 2 3
-bash: 2: command not found
[root@centos6 ~]# a="1 2 3"
[root@centos6 ~]# echo $a
1 2 3
1.4 引号的意义
1.5 变量定义小结:
普通变量:
a=1 连续的数字字符串
a="/etc/rc.local $USER" 解析结果后输出
a=‘$USER‘ 原样输出
命令内容定义:
a=`ls` 反引号 //* 将反引号中字符当做命令输出
a=$(ls)
2. 特殊变量:
2.1 位置变量
$n :获取当前执行的shell脚本的第n个参数值(参数值默认以空格区分,如果参数加了双引号,则将双引号的整个作为一个参数, 不管其中是否有空格,如 例3 ),n=1..9 ,当 n 为0时表示脚本的文件名,如果n大于9,用大括号括起来${10},参数以空格隔开。如下:
例1:
[root@centos6 ~]# echo $1 a
a
[root@centos6 ~]# echo $1 $2 a b
a b
例2:
[root@centos6 ~]# cat p.sh
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15}
[root@centos6 ~]# sh p.sh {a..z}
a b c d e f g h i j k l m n o
例3:
[root@centos6 ~]# cat p.sh
echo $2
[root@centos6 ~]# sh p.sh "1 2" "3 4"
3 4//* 注意当整数超过9 时,数字要使用 “{}” 扩起来否则会出现 以下结果
[root@centos6 ~]# cat p.sh
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15
[root@centos6 ~]# sh p.sh {a..z}
a b c d e f g h i a0 a1 a2 a3 a4 a5
$0 获取当前脚本本身的名字
$1 获取当前传递给该shell脚本的第一个参数
$2 获取当前传递给该shell脚本的第二个参数
$# 获取当前传给脚本的参数个数
$$ 获取当前脚本运行的当前进程 PID 号
$@ 获取当前传给脚本的所有参数的列表
$* 获取当前以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误
$1 是传递给该shell脚本的第一个参数,一般系统启动文件最后都有这个,作为接收输入的命令如
# /etc/init.d/sshd start //*是将 start 赋值给 $1,然后脚本根据这个参数执行这个参数下的命令:如下脚本:
[root@centos6 ~]# cat p.sh
case "$1" in
start)
echo "123" && exit 0
;;
stop)
echo "234" && exit 0
;;
esac
exit
[root@centos6 ~]# /etp.sh start
123
[root@centos6 ~]# sh p.sh stop
234
$0 是用来取脚本本身的名字,就是你命令之后跟的内个名字,如下图的 sh a.sh 中的 a.sh
[root@centos6 ~]# cat a.sh
echo $0
[root@centos6 ~]# sh a.sh
a.sh
例1:在启动脚本中也有 $0 ,当启动脚本的时候输入的不正确时就会出现
[root@centos6 ~]# tail -4 /etc/init.d/sshd |head -1
echo $"Usage: $0 {start|stop|restart|reload|force-reload|condrestart|try-restart|status}"
[root@centos6 ~]# /etc/init.d/sshd *
用法: /etc/init.d/sshd {start|stop|restart|reload|force-reload|condrestart|try-restart|status}
例2:将文件与名字分离
[root@centos6 etc]# cat ~/a.sh
dirname $0
basename $0
[root@centos6 etc]# sh ~/a.sh
/root
a.sh
//* dirname $0 取得是路径
//* bashname $0 取得是名字
$# :获取当前传给脚本的所有参数的个数,一般用于控制参数个数,如例1.
[root@centos6 ~]# cat a.sh
echo $#
[root@centos6 ~]# sh a.sh 1 2 3 4 5 6
6
例1:判断参数少于两个,就告诉报 脚本名加 "ARG1 ARG2" ,等于或大于两个参数时,显示钱两个参数
[root@centos6 ~]# cat a.sh
#!/bin/bash
[ $# -ne 2 ] && {
echo "$0 ARG1 ARG2"
exit 1
}
echo $1 $2
[root@centos6 ~]# sh a.sh
a.sh ARG1 ARG2
[root@centos6 ~]# sh a.sh 1 2
1 2
//* 脚本中的 exit 1 指的是返回值:如下例2
例2:
[root@centos6 ~]# cat p.sh
echo "123456789"
exit 28
[root@centos6 ~]# sh p.sh
123456789
[root@centos6 ~]# sh p.sh ;echo $?
123456789
28
$? 命令执行的返回值,0表示没有错误,其他表示有错误
[root@centos6 ~]# ls ; echo $?
a.sh iptables.sh p.sh
0
[root@centos6 ~]# 123 ; echo $?
-bash: 123: command not found
127 //* 分号就是间隔符,表示前面和后面是两个命令的意思,执行完前一个,再执行后一个,两个命令没有任何依赖关系
返回值代表意义:
标签:自学linux 开头 roo comm lin 不同 export 进入 退出
原文地址:https://www.cnblogs.com/yaoyaojcy/p/9206922.html