您的位置:首页 > 运维架构 > Shell

shell

2016-05-17 16:44 281 查看
sh( ) 表示fork一个子进程,环境变量继承父进程,但不影响父进程

source(.) 表示同进程嵌入执行,类似于内联函数或者宏,直接影响父进程环境变量

exec 表示同进程替换执行,不再返回到原进程。

单引号‘’:取消除单引号以外的任何字符的特殊含义。

如:echo ‘my name is $name’

其结果为:my name is $name ,

此时$只作为一个普通字符使用了。

双引号“”

取消除双引号、$号以及_号以外的所有字符的特殊含义

输入转向符〈

用于指定输入的设备或文件。如:mail root〈message则将文件message 的内容发送给root。

输出转向符 〉

用于将输出发送到指定的设备或文件。如:lf 〉myfile 其结果是将lf的执行结果放到文件myfile中

&& 和 ||

其作用是使管道线有条件地执行。其使用方法为:

command1 && command2:当且仅当command1执行成功后才执行command2

command1 || command2:当且仅当command1执行失败后才执行command2

{} 的用法:花括号被用来区分变量名和周围的文本

()的用法:命令替代,用来替代一个命令的命令行输出,命令替代的标准语法,也是POSIX鼓励的一种语法是:$(command).

命令替代的另外一种格式是用反引号来环绕一个命令象:`command` 它和$(command) 是等价的,并且这是Bourne Shell认证的唯一的形式。`command`形式可以用在POSIX的脚本中和Bourne Shell的脚本中。

echo 选项:

-e :启用转义字符(类似java等语言中的\)

-E:关闭转义字符(默认)

-n :取消行末换行(与 -e下的 \c 字符同)

source 就是让 script 在当前 shell内执行、而不是产生一个 sub-shell来执行。这样若 script 的环境有变,当前shell的环境变量就变了。(注:source相当于. scriptName,与直接输入脚本名称不同)

()将command group放在子shell中执行,不影响当前变量

而{}则在同一shell中运行,影响当前变量

定义function有两种方法:

unction function_name {

}

或者

fuction_name () {

}

用哪一种无所谓,只是碰到所定义的名字与现有命令或别名冲突的话,方式二或许会失败

file=/dir1/dir2/dir3/my.file.txt

${file#*/}:拿掉第一条/及其左边的字符串:dir1/dir2/dir3/my.file.txt

${file##*/}:拿掉最后一条/及其左边的字符串:my.file.txt

${file%/*}:拿掉最后一条/及其右边的字符串:/dir1/dir2/dir3

规则如下:

# 去掉左边(在键盘上 # 在 $ 左边)

% 去掉右边(在键盘上 # 在 $ 右边)

单个字符是最小匹配,两个字符是最大匹配

${file:5:5}:提取第五个字节后面连续5个字节:/dir2

${file/dir/path}:将第一个dir转换成path:/path1/dir2/dir3/my.file.txt

${file//dir/path}:将所有dir转换成path:/path1/path2/path3/my.file.txt

利用 ${ } 還可針對不同的變數狀態賦值(沒設定、空值、非空值):

${file-my.file.txt} :假如 $file 沒有設定,則使用 my.file.txt 作傳回值。(空值及非空值時不作處理)

${file:-my.file.txt} :假如 $file 沒有設定或為空值,則使用 my.file.txt 作傳回值。 (非空值時不作處理)

${file+my.file.txt} :假如 $file 設為空值或非空值,均使用 my.file.txt 作傳回值。(沒設定時不作處理)

${file:+my.file.txt} :若 $file 為非空值,則使用 my.file.txt 作傳回值。 (沒設定及空值時不作處理)

${file=my.file.txt} :若 $file 沒設定,則使用 my.file.txt 作傳回值,同時將 $file 賦值為 my.file.txt 。 (空值及非空值時不作處理)

${file:=my.file.txt} :若 $file 沒設定或為空值,則使用 my.file.txt 作傳回值,同時將 $file 賦值為 my.file.txt 。 (非空值時不作處理)

${file?my.file.txt} :若 $file 沒設定,則將 my.file.txt 輸出至 STDERR。 (空值及非空值時不作處理)

${file:?my.file.txt} :若 $file 沒設定或為空值,則將 my.file.txt 輸出至 STDERR。 (非空值時不作處理)

command > filename 把把标准输出重定向到一个新文件中

command >> filename 把把标准输出重定向到一个文件中(追加)

command 1 > fielname 把把标准输出重定向到一个文件中

command > filename 2>&1 把把标准输出和标准错误一起重定向到一个文件中

command 2 > filename 把把标准错误重定向到一个文件中

command 2 >> filename 把把标准输出重定向到一个文件中(追加)

command >> filename 2>&1 把把标准输出和标准错误一起重定向到一个文件中(追加)

command < filename >filename2 把command命令以filename文件作为标准输入,以filename2文件作为标准输出

command < filename 把command命令以filename文件作为标准输入

command << delimiter 把从标准输入中读入,直至遇到delimiter分界符

command <&m 把把文件描述符m作为标准输入

command >&m 把把标准输出重定向到文件描述符m中

command <&- 把关闭标准输入

一般而言,A="a b c def" 這樣的變量只是將 $A 替換為一個單一的字串,

但是改為 A=(a b c def) ,則是將 $A 定義為組數...

bash 的組數替換方法可參考如下方法:

${A[@]} 或 ${A

} 可得到 a b c def (全部組數)

${A[0]} 可得到 a (第一個組數),${A[1]} 則為第二個組數...

${#A[@]} 或 ${#A
} 可得到 4 (全部組數數量)

${#A[0]} 可得到 1 (即第一個組數(a)的長度),${#A[3]} 可得到 3 (第四個組數(def)的長度)

A[3]=xyz 則是將第四個組數重新定義為 xyz ...

要定位第10个参数有两种方法:

方法一是用 ${10} 即可。

方法二用shift(具体内容另查)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: