Shell Script基本语言
来源:互联网 发布:什么美工刀片最锋利 编辑:程序博客网 时间:2024/05/22 12:24
第一个shell script程序
#!/bin/bash# Program:# this is a test shell script# 2015/07/10 zhubinqiang Fitst releaseecho "Welcome to shell script!"
脚本第一行 指定/bin/bash解释器执行,虽然以#开头 但不是注释
#开头的是单行注释
注释
# 这是单行注释1# 这是单行注释2
Shell里面没有多行注释,小技巧实现多行注释
COMMENT_BLOCK=if [ $COMMENT_BLOCK ]; then===========================echo "comment1"echo "comment2"echo "comment3"===========================fi
变量
a=15version1=$(uname -r)version2=`uname -r`echo $aecho ${version1}echo $version2PATH="$PATH:$HOME/bin"export PATHunset a
- 变量名=变量, 两边没有空格的。 空格在shell中有特殊用途,分开的话会解释成【命令 参数 参数】的形式
- 变量名区分大小写。 name 与 Name 是两个变量
- 变量有空格的话要用单引号” 或 双引号 “” 将变量内容结合起来
- 上式中$a 与 ${a} 是相同效果的。使用${a} 避免出错
- ‘${a}’ 是强引用 输出${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
$((…))运算
a=1a=$((a+1))echo $a
expr 运算
a=1b=`expr $a + 1`echo $b
if … else … 判断语句
a="hello"if [ "$a" == "hello" ]; then echo "Hello, how are you."elif [ "$a" == "" -o "$a" == '?' ]; then echo "what?"elif [ "$a" == 'y' ] || [ "$a" == 'Y' ]; then echo "Yes"else echo "I don't understand you."fi
[ 左右两边有一个空格, == 左右两边有一个空格,] 左边有一个空格
算术与字符串测试
*如果在双中括号[[ … ]]测试中的话,那么不需要转义符\
文件测试
Case
像C语言中的switch… case…
a="hello"case $a in"hello") echo "Hello, how are you." ;;"") echo "what?" ;;*) echo "I don't understand you." ;;esac
while 循环
i=0s=0while [ "$i" -le 100 ];do s=$((s+i)) i=$((i+1))doneecho "1 + 2 + 3 + ... + 100 = $s"
until 循环
i=0s=0until [ "$i" -gt 100 ]; do s=$((s+i)) i=$((i+1))doneecho "1 + 2 + 3 + ... + 100 = $s"
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
数组
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
函数
函数定义
function function_name { command...}function function_name() { command...}function_name() { command...}
使用函数
function sayHello() { local name=$1 echo "Hello $name" return 0}sayHello "Tom"
return返回的是状态码。 0 表示成功, 非0表示失败。
如果要返回值用echo
function sum(){ local a=$1 local b=$2 local s=$((a+b)) echo $s}s=`sum 2 3`echo $s
用shift 获取参数
function sum(){ local a=$1 shift local b=$1 local s=$((a+b)) echo $s}s=`sum 2 3`echo $s
I/O操作
终端输入,并赋值
read -p "Your name(within 30s):" -t 30 namedecho $named
输出多行
cat << EOFcomment1comment2comment3EOF
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
管道操作
COMMAND1 | COMMAND2 | COMMAND3cat /etc/passwd | grep "root" | awk -F":" '{print $1}'
管道操作是由前面的stdin传递过来的。 stderr不会传过去
特殊Shell变量
“
系统环境变量
字符串操作
* $substring 是一个正则表达式
结构汇总
0 0
- Shell Script基本语言
- Shell Script语言教程~
- shell Script
- shell script
- Shell script
- shell script
- shell script
- shell script
- shell script
- shell script
- shell script
- shell script
- shell script
- Shell Script
- shell script
- shell script
- shell script
- shell script
- 问题 C: 求最小公倍数
- Logcat只输出Error级别的日志
- P2P网贷平台跑路已经成习惯?
- posix 标准的一些查看
- Java Network Programming with Callback model
- Shell Script基本语言
- 【其他】c# 正则匹配程序
- “黑马程序员"基本数据类型对象包装类
- UISegmentedControl
- Linux中iptables设置详细
- 关于微信支付失败,在参数正确的情况下
- 黑马程序员——java反射
- Edittext 设置setError()的详解
- IIS mime类型