shell编写规则
来源:互联网 发布:单片机的最小系统 编辑:程序博客网 时间:2024/05/22 17:13
第一个shell script程序
#!/bin/bash# Program:# this is a test shell script# 2015/07/10 zhubinqiang Fitst releaseecho "Welcome to shell script!"
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
脚本第一行 指定/bin/bash解释器执行,虽然以#开头 但不是注释
开头的是单行注释
注释
# 这是单行注释1# 这是单行注释2
- 1
- 2
- 1
- 2
Shell里面没有多行注释,小技巧实现多行注释
COMMENT_BLOCK=
if [ $COMMENT_BLOCK ]; then===========================echo "comment1"echo "comment2"echo "comment3"===========================fi- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
变量
a=15version1=$(uname -r)version2=`uname -r`echo $aecho ${version1}echo $version2PATH="$PATH</span>:<span class="hljs-variable">$HOME/bin"export PATHunset a
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 变量名=变量, 两边没有空格的。 空格在shell中有特殊用途,分开的话会解释成【命令 参数 参数】的形式
- 变量名区分大小写。 name 与 Name 是两个变量
- 变量有空格的话要用单引号” 或 双引号 “” 将变量内容结合起来
- 上式中
</span>a与<span> {a} 是相同效果的。使用${a} 避免出错 - ‘
</span>a′是强引用输出<span> {a}。”${a}”是弱引用,输出变量值 - export 使变量成为环境变量
- unset 取消变量
- shell变量是不区分类型的,变量值都是字符串。Bash允许整数比较和运算操作,但变量中只有数字
算术运算
算术运算符
let 运算
a=1let a=a+1echo $a # 2let a+=1echo $a # 3 let "a = a + 2"echo $a # 5
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
$((…))运算
a=1a=$((a+1))echo $a
- 1
- 2
- 3
- 1
- 2
- 3
expr 运算
a=1b=`expr $a + 1`echo $b
- 1
- 2
- 3
- 1
- 2
- 3
if … else … 判断语句
a="hello"if [ "$a" == "hello" ]; then echo "Hello, how are you."elif [ "$a</span>"</span> == <span class="hljs-string">""</span> -o <span class="hljs-string">"<span class="hljs-variable">$a" == '?' ]; then echo "what?"elif [ "$a</span>"</span> == <span class="hljs-string">'y'</span> ] || [ <span class="hljs-string">"<span class="hljs-variable">$a" == 'Y' ]; then echo "Yes"else echo "I don't understand you."fi
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
[ 左右两边有一个空格, == 左右两边有一个空格,] 左边有一个空格
算术与字符串测试
*如果在双中括号[[ … ]]测试中的话,那么不需要转义符\
文件测试
Case
像C语言中的switch… case…
a="hello"case $a in"hello") echo "Hello, how are you." ;;"") echo "what?" ;;*) echo "I don't understand you." ;;esac
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
while 循环
i=0s=0while [ "$i" -le 100 ];do s=$((s+i)) i=$((i+1))doneecho "1 + 2 + 3 + ... + 100 = $s"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
until 循环
i=0s=0until [ "$i" -gt 100 ]; do s=$((s+i)) i=$((i+1))doneecho "1 + 2 + 3 + ... + 100 = $s"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
for 循环
for i in Tom Jack John; do echo $idonefor i in $(seq 1 5); do echo $idonefor i in {1..5}; do echo $idonefor((i=0; i<5; i++)); do echo $idone
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
数组
array=(5 4 3 2 1)echo ${array[0]} # 第一个元素len=${#array[*]} # 数组长度for((i=0; i<$len; i++));do echo ${array[$i]}donefor i in ${!array[@]}; do echo ${array[$i]}done
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
函数
函数定义
function function_name { command...}function function_name() { command...}function_name() { command...}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
使用函数
function sayHello() { local name=$1 echo "Hello $name" return 0}sayHello "Tom"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
return返回的是状态码。 0 表示成功, 非0表示失败。
如果要返回值用echo
function sum(){ local a=$1 local b=$2 local s=$((a+b)) echo $s}s=`sum 2 3`echo $s
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
用shift 获取参数
function sum(){ local a=$1 shift local b=$1 local s=$((a+b)) echo $s}s=`sum 2 3`echo $s
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
I/O操作
终端输入,并赋值
read -p "Your name(within 30s):" -t 30 namedecho $named
- 1
- 2
- 1
- 2
输出多行
cat << EOFcomment1comment2comment3EOF
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
I/O重定向
COMMAND > filename # 重定向stdout到文件filenameCOMMAND 1> filename # 重定向stdout到文件filenameCOMMAND >> filename # 重定向stdout并追加到文件filenameCOMMAND 1>> filename # 重定向stdout并追加到文件filenameCOMMAND 2> filename # 重定向stderr到文件filenameCOMMAND 2>> filename # 重定向stderr并追加到文件filenameCOMMAND &> filename # 将stdout和stderr都重定向到filenameCOMMAND &>> filename # 将stdout和stderr都重定向并追加到filenameCOMMAND > filename 2>&1 # 将stdout和stderr都重定向到filenameCOMMAND >> filename 2>&1 # 将stdout和stderr都重定向并追加到filename
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
管道操作
COMMAND1 | COMMAND2 | COMMAND3cat /etc/passwd | grep "root" | awk -F":" '{print $1}'
- 1
- 2
- 1
- 2
管道操作是由前面的stdin传递过来的。 stderr不会传过去
特殊Shell变量
“∗”要用引号引起来,否则默认为”@”
系统环境变量
字符串操作
* $substring 是一个正则表达式
结构汇总
globbing
*
: 匹配任意长度的任意字符
a*b 匹配 ab, a123b
?
: 匹配任意单字符
a?b 匹配 a1b, a2b
[]
: 匹配指定范围内的 任意单字符
[abc], [a-z], [0-9]
[^]
: 匹配任意范围外的任意单字符
[^a-z0-9]
字符合集 [[:space:]]
: 所有空白字符 [[:punct:]]
: 所有标点字符 [[:lower:]]
: 小写字母 [[:upper:]]
: 大写字母 [[:alpha:]]
: 所有字母 [[:digit:]]
: 数字 [[:alnum:]]
: 字母数字
举例:在/urs/lib/下列出 以l开头,中间有数字,结尾是小写字母 ls /usr/lib/l*[[:digit:]]*[[:lower:]]
echo -e '\033[32mHello\033[0m'
\033[
\033
: Ctrl
单个数字:控制字体
3#: 3表示控制其前景色, #是一个数字
4#: 4表示控制其背景色, #是一个数字
组合使用,彼此间使用;
分隔
m: 是固定格式 \033[0m
: 控制符到此结束
(function () {('pre.prettyprint code').each(function () {
var lines =
for (i = 1; i <= lines; i++) {
};
$numbering.fadeIn(1700);
});
});
这里写代码片
- shell编写规则
- shell编写
- shell编写
- Shell编写
- shell编写
- shell编写
- shell编写
- Makefile文件编写规则
- Makefile文件编写规则
- Makefile文件编写规则
- Makefile编写规则
- JavaBean编写规则
- PHP程序编写规则
- Makefile 编写规则
- Makefile编写规则
- Makefile编写基本规则
- Makefile通用编写规则
- snort规则编写简述
- python 操作csv文件
- 关于谷歌浏览器html跨域请求
- View.postDelayed()/post() 原理(1)
- Mayan游戏
- git 笔记之 多人git pull冲突解决
- shell编写规则
- 使用定时器2秒后终止一个线程
- Java导入导出Excel工具类ExcelUtil
- 2003下搭建easypanel(康乐)虚拟主机控制面板
- 运行uiautomator时无法打开可视界面
- 放假
- Java实现哈夫曼编码和解码
- 01背包问题和完全背包问题 (转载)
- memset函数