bash编程基础

====基础知识====
1.基本的符号
\       转义
单引号  原样输出
双引号  解释特殊的含义,比如变量引用
|       输出重定向

2.循环结构
1)until test-commands ; do consequent-commands ; done
2)while test-commands ; do consequent-commands ; done
3)for name [ [in [words ...] ] ; ] do commands ; done

3.条件结构
1)if test-commands ; then
consequent-commands ;
[elif more-test-commands ; then
more-consequents ;]
[else alternate-consequents ;]
fi
2)case word in [ [(] pattern [| pattern ]...) command-list ;;]... esac
3)select name [in words ...]; do commands ; done

4.计算
((...))算术计算
[[...]]支持变量扩展

5.组合命令
(list) --开启子shell运行

6.特殊的变量
变量引用方式$var或者${var_name}
*/@ 两个变量都输出所有参数值,前者使用IFS分割,后者使用空格   
#   参数个数
?   返回最近前台程序执行完成的状态值
-   当前shell选项值
$   当前shell的PID值,如果调用子shell,也是当前shell的PID值
!   返回最近后台程序执行完成的状态值
0   程序或是脚本名称
_   前一个程序的最后参数值

${parameter:+word}  parameter为空则使用word的值
${parameter:=word}  parameter为空则使用word的值,并赋值给parameter
${parameter:?word}  parameter为空,打印错误信息word(没有则系统输出)
${parameter:+word}  parameter为空,输出word的信息,不为空,什么都不输出
${#parameter}       parameter的长度
${#parameter:offset}    从parameter的长度offset开始的字串
${parameter#word}   最小化匹配字符串开头,得到删除匹配开头的字符串
${parameter##word}  最大化匹配字符串开头,得到删除匹配开头的字符串
${parameter%word}   最小化匹配字符串结尾,得到删除匹配结尾的字符串
${parameter%%word}  最大化匹配字符串结尾,得到删除匹配结尾的字符串
${parameter/pattern/string} 使用string替换pattern模式,得到替换后的字符串

7.函数
name () compound-command [ redirections ]
function name [()] compound-command [ redirections ]

8.内建命令
: [arguments] 总是返回0,用于扩展参数
. filename [arguments] 执行filename中的命令,及使用可选参数
break   中断并退出循环,条件结构等
exec    替代shell不需要创建新的进程
bind    绑定键值

9.行编辑
ctrl+a  行头
ctrl+e  行尾
esc+f   下一个单词
esc+b   后一个单词
ctrl+l  清屏
ctrl+k  删除当前光标到结尾的字符串
alt+d   删除当前光标到单词结尾字符串
ctrl+w  删除后面的单词
ctrl+y  粘贴最近删除的内容
alt+y   轮流贴出曾经删除的内容
ctrl+x+backspace 删除光标到行头的字符串
ctrl+t 交换字符位置
esc+t  交换单词位置

10.命令搜索
ctrl+r
历史命令
!n
!string

11.调试shell脚本
bash -x script
#!/bin/env prog可移植性比较强
循环计数移植性比较强的
for ((i=0; i<10; i++)); do echo $i; done
for i in $(seq 1 10); do echo $i; done

12.使用例子
a.获取IP地址
/sbin/ifconfig -a | awk '/(cast)/ { print $2 }' | cut -d':' -f2 | head -1

b.选择目录
select script example:
#!/bin/env bash
# cookbook filename: select_dir

directorylist="Finished $(ls /)"
PS3='Directory to process? ' # Set a useful select prompt
until [ "$directory" == "Finished" ]; do
    printf "%b" "\a\n\nSelect a directory to process:\n" >&2
    select directory in $directorylist; do
    # User types a number which is stored in $REPLY, but select
    # returns the value of the entry
    if [ "$directory" = "Finished" ]; then
        echo "Finished processing directories."
        break
    elif [ -n "$directory" ]; then
        echo "You chose number $REPLY, processing $directory ..."
        # Do something here
        break
    else
        echo "Invalid selection!"
    fi # end of handle user's selection
    done # end of select a directory
done # end of while not finished

c.提供选项
func-choice example:
#!/bin/env bash

# Let the user make a choice about something and return a standardized
# answer. How the default is handled and what happens next is up to
# the if/then after the choice in main
# Called like: choice <promtp>
# e.g. choice "Do you want to play a game?"
# Returns: global variable CHOICE

function choice {
    CHOICE=''
    local prompt="$*"
    local answer
    read -p "$prompt" answer
    case "$answer" in
        [yY1]) CHOICE='y';;
        [nN0]) CHOICE='n';;
        *) CHOICE="$answer";;
    esac
} # end of function choice

 

你可能感兴趣的:(bash)