001、脚本基础1
本文最后更新于 66 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com

脚本基础1

第一行必须包括shell声明序列:#!

#!/bin/bash

检测脚本中的语法错误

bash -n /path/to/some_script

调试执行

bash -x /path/to/some_script

变量命名法则:

1、不能使程序中的保留字:例如if, for
2、只能使用数字、字母及下划线,且不能以数字开头
3、见名知义
4、统一命名规则:驼峰命名法

变量的种类

局部变量:生效范围为当前shell进程;对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效。
变量赋值:name=‘value’
可以使用引用value:
(1) 可以是直接字串; name=“root"
(2) 变量引用:name="$USER"
(3) 命令引用:name=`COMMAND` name=$(COMMAND)
变量引用:${name} $name
"":弱引用,其中的变量引用会被替换为变量值
'':强引用,其中的变量引用不会被替换为变量值,而保持原字符串
显示已定义的所有变量:set
删除变量:unset name

环境(全局)变量:生效范围为当前shell进程及其子进程

#变量声明、赋值:
export name=VALUE
declare -x name=VALUE
变量引用:$name, ${name}
#显示所有环境变量:
env
printenv
export
declare -x
#删除变量:
unset name
#bash内建的环境变量:
PATH
SHELL
USER
UID
HOME
PWD
SHLVL
LANG
MAIL
HOSTNAME
HISTSIZE

#环境变量相关配置文件
/etc/proflie
/etc/bashrc
~/.bashrc
~/.bash_profile
/etc/proflie.d/  # 目录
#四文件读取顺序(CentOS6和7都一样)
① /etc/profile
② ~/.bash_profile
③ ~/.bashrc
④ /etc/bashrc

本地变量:生效范围为当前shell进程中某代码片断,通常指函数

位置变量:$1, $2, ...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数

位置变量:在脚本代码中调用通过命令行传递给脚本的参数
$1, $2, ...:对应第1、第2等参数,shift [n]换位置
$0: 命令本身
$*: 传递给脚本的所有参数,全部参数合为一个字符串
$@: 传递给脚本的所有参数,每个参数为独立字符串
$#: 传递给脚本的参数的个数
$@ $* 只在被双引号包起来的时候才会有差异
set --清空所有位置变量
[root@clsn scripts]# vim chanshu.sh
#!/bin/bash
echo $0
echo "第一个参数:" $1
echo "第二个参数:" $2
echo "第11个参数:" ${11}
[root@clsn scripts]# sh chanshu.sh
chanshu.sh
第一个参数:
第二个参数:
第11个参数:
[root@clsn scripts]# sh chanshu.sh 1 2 3 4 5 6 7 8 9 10 11 
chanshu.sh
第一个参数: 1
第二个参数: 2
第11个参数: 11 
[root@clsn scripts]# vim chanshu.sh
echo $0
echo "第一个参数:" $1
echo "第二个参数:" $2
echo "第10个参数:" ${10}
echo "第11个参数:" ${11}
echo "参数个数:" $#

[root@clsn scripts]# sh chanshu.sh 55 2 3 4 5 6 7 8 9 10 11 112
chanshu.sh
第一个参数: 55
第二个参数: 2
第10个参数: 10
第11个参数: 11
参数个数: 12 
[root@clsn scripts]# vim chanshu.sh
echo $0
echo "第一个参数:" $1
echo "第二个参数:" $2
echo "第10个参数:" ${10}
echo "第11个参数:" ${11}
echo "参数个数:" $#
echo "参数:" $*
"chanshu.sh" 18L, 456C 已写入                                  
[root@clsn scripts]# sh chanshu.sh 55 2 3 4 5 6 7 8 9 10 11 112
chanshu.sh
第一个参数: 55
第二个参数: 2
第10个参数: 10
第11个参数: 11
参数个数: 12
参数: 55 2 3 4 5 6 7 8 9 10 11 112 

[root@clsn scripts]# set -- "I am" handsome boy..
[root@clsn scripts]# echo $1
I am
[root@clsn scripts]# echo $2
handsome
[root@clsn scripts]# echo $3
boy..
[root@clsn scripts]# echo $*
I am handsome boy..
[root@clsn scripts]# echo $@
I am handsome boy..

[root@clsn scripts]# for i in $*;do echo $i ;done
I
am
handsome
boy..
[root@clsn scripts]# for i in $@;do echo $i ;done
I
am
handsome
boy..
[root@clsn scripts]# for i in "$@";do echo $i ;done
I am
handsome
boy..
[root@clsn scripts]# for i in "$*";do echo $i ;done
I am handsome boy.. 

特殊变量:$?, $0, $*, $@, $#,$$

[root@clsn scripts]# echo $?
0
[root@clsn scripts]# echo $$
1368
[root@clsn scripts]# echo $!

[root@clsn scripts]# echo $_
echo 

只读变量:只能声明,但不能修改和删除

声明只读变量:
readonly name
declare  -r name
查看只读变量:
readonly –p

$?退出状态,进程使用退出状态来报告成功或失败

•0 代表成功,1-255代表失败
•$? 变量保存最近的命令退出状态

exit [n]退出状态码

exit [n]:自定义退出状态码
注意:脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命令后面的数字
注意:如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码

$-变量

[root@contos7 ~]# echo $-
himBH
[root@contos7 ~]# 
h:hashall,打开这个选项后,Shell 会将命令所在的路径hash下来,避免每次都要查询。通过set +h将h选项关闭
i:interactive-comments,包含这个选项说明当前的shell 是一个交互式的shell。所谓的交互式shell,在脚本中,i选项是关闭的。
m:monitor,打开监控模式,就可以通过Job control来控制进程的停止、继续,后台或者前台执行等。
B:braceexpand,大括号扩展
H:history,H选项打开,可以展开历史列表中的命令,可以通过!感叹号来完成,例如“!!”返回上最近的一个历史命令,“!n”返回第n 个历史命令

\防止扩展

反斜线(\)会使随后的字符按原意解释

$echo Yourcost:\$5.00
Yourcost:$5.00

加引号来防止扩展
•单引号(’)防止所有扩展
•双引号(”)也防止所有扩展,但是以下情况例外:

$(美元符号)-变量扩展
`(反引号)-命令替换
\(反斜线)-禁止单个字符扩展
!(叹号)-历史命令替换
谨此笔记,记录过往。凭君阅览,如能收益,莫大奢望。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇