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(具体内容另查)
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(具体内容另查)
相关文章推荐
- bash_常用bash命令
- bash_备份mysql数据库
- Load sharepoint envirement by powershell
- linux shell script 脚本 变量中常用的字符串处理方法
- Android自动化测试之Shell脚本一——模拟触屏事件
- shell 常量
- Hadoop的shell脚本分析
- 希尔(Shell)排序 C++
- Shell 脚本中中括号“[]”判断问题
- shell脚本循环删除旧tag
- 在linux shell中获取时间
- linux shell 中判断字符串为空的正确方法
- Centos出现-bash: unzip: command not found的解决办法
- 第11章 认识与学习 bash
- shell常用命令之五 awk
- 企业Shell实战-MySQL分库分表备份脚本
- Mit6.828 HW2 Shell
- 解决部分国产机连不上adb shell的办法
- android 命令(adb shell)进入指定模拟器或设备
- shell 下不能使用tab补全命令