shell

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(具体内容另查)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值