通配符
  1. 没有 '.'
  2. [Aa] 表示 A 或者 a
  3. ? 表示任意字符
  4. * 表示任意字符串
IFS
data='name, sex, rollno, location'
oldIFS=$IFS
IFS=', '
for i in $data; do
echo $i;
done
变量
$* 参数被作为一个单词 (这个变量很少被使用)
$@ 参数按 IFS 分割
$? 退出参数
$$ 当前 shell 进程的 pid
$! 后台运行的最后一个进程的 pid
长度
var='xxxx'
length=${#var}
length=`echo -n $var | wc -m`
word=`echo -n $var | wc -w`
拼接
s1='abc'
s2='def'
s3=`printf "%s%s" $s1 $s2`
echo $s3
变量默认值
var=${var-'value'} # 如果 var 没被声明, 就用 value
子串
a='abcd'
echo ${a:0} # abcd
echo ${a:1} # bcd
echo ${a:1:2} # bc
子串表达式
{$var#str} # 从开头删除 str
{$var##str} # 从开头删除最长匹配的 str
{$var%str} # 从结尾删除 str
{$var%%str} # 从结尾删除最长匹配的 str dir=/etc/httpd/httpd.conf
echo ${dir#/*/} # httpd/httpd.conf
echo ${dir##/*/} # httpd.conf echo ${dir%/*/} # 没有删除任何
echo ${dir%/*} # /etc/httpd
echo ${dir%%/*} # 全部被删除 为空
字符串替换 (可以有正则表达式)
str='abc 123 def abc'
echo ${str/abc /def} # def123 def abc
echo ${str//abc/def} # def 123 def def
echo ${str//[0-9]/} # abc def abc
判断
字符串
[ $var == "xxx" ]
[ $var != "xxx" ]
[ -n STRING ] # the length of STRING is nonzero
[ -z STRING ] # the length of STRING is zero
数字
[ $num -eq 10 ]
[ $num -ne 10 ]
[ $num -lt 10 ]
[ $num -le 10 ]
[ $num -gt 10 ]
[ $num -ge 10 ]
文件
[ -d $FILE_NAME ] # dir
[ -e $FILE_NAME ] # exist
[ -f $FILE_NAME ] # regular file
[ -L $FILE_NAME ] # symbol link
[ -r $FILE_NAME ]
[ -w $FILE_NAME ]
[ -x $FILE_NAME ]
[ -S $FILE_NAME ] # socket
[ -b $FILE_NAME ] # block
[ -c $FILE_NAME ] # char
RONDOM

shell 的 $((RANDOM)) 会返回一个随机值

if [ ${#} -eq 0 ]; then
echo $((RANDOM))
elif [ $1 == '--help' -o $1 == '-h' ]; then
echo "usage: random num1, num2 [num1, num2)"
elif [ ${#} -eq 1 ]; then
echo $((RANDOM%$1))
else
echo $((RANDOM%(($2-$1))+$1))
fi
数学
echo $((100 / 3))

i=8
echo $((i + 12)) i=8
let i=5+3 # '=' 两侧不允许有空格
i=$((i+1))
let i++
控制流
# if
if [ xxx ]; then
xxx
elif [ xxx ]; then
xxx
else
xxx
fi if [ xxx ] && [ xxx ]; then
xxx
fi # while
while [ xxx ]; do
xxx
done while read line; do
echo $line;
done < input.txt; # for
for i in `seq 1 10`; do
echo $i;
done for x in one two three four; do
echo number $x
done # case
x="start"
case $x in
start)
echo 'start'
;;
stop)
echo "stop"
;;
*)
echo stop
;;
esac x="restart"
case $x in
start|restart)
echo 'start'
;;
stop)
echo "stop"
;;
*)
echo stop
;;
esac
函数
myvar="hello"
myfunc() {
myvar="one two three"
for x in $myvar; do
echo $x
done
}
myfunc # 执行函数
echo $myvar $x # one two three (说明变量是全局的)
myvar="hello"
myfunc() {
local x
local myvar="one two three"
for x in $myvar; do
echo $x
done
}
myfunc
echo $myvar $x # hello ($x 没有输出)
repeat() {
while true; do
$@ && return
sleep 5
done
}
子 shell

子 shell 就是 () 里面的内容,相当于重新开启一个 shell。这样做的好处是 子 shell 里面做的事情不会影响到当前的 shell,比如定义变量,cd 到别的路径..

pwd;
(cd /bin; ls);
pwd;
数组
declare -A arr
arr=([index1]='abc' [index2]='def')
echo ${arr[index1]}
echo ${arr['index1']} arr[index3]='xyz'
echo ${arr[index3]}
for i in ${arr[@]}; do
echo $i; # abc def xyz
done for i in ${!arr[@]}; do
echo $i; # index1 index2 index3
done
获取命令参数
while getopts xyz opt; do
case $opt in
x)
echo 'x'
;;
y)
echo 'y'
;;
z)
echo 'z'
;;
?)
echo 'invalid'
;;
esac
done
./run -xyz (执行上面的代码)
while getopts x:y:z: opt; do
case $opt in
x)
echo 'x' $OPTARG
;;
y)
echo 'y' $OPTARG
;;
z)
echo 'z' $OPTARG
;;
*)
echo 'invalid'
;;
esac
done
./run -x abc -y def -z ghi

免费提供最新Linux技术教程书籍,为开源技术爱好者努力做得更多更好:https://www.linuxprobe.com/

shell 笔记的更多相关文章

  1. bash&nbsp;shell笔记1&nbsp;脚本基础知识

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/505644 * ...

  2. Bash shell 笔记总结(一) 转自http://www.bubuko.com/infodetail-509992.html,谢谢原作者

    本文是上课笔记总结,涉及细节知识点会在以后文章说明! bash脚本编程: 脚本程序:解释器解释执行: shell: 交互式接口:编程环境: shell: 能够提供一些内部命令,并且能通过PATH环境变 ...

  3. Java中执行shell笔记

    在java中执行shell有好几种方式:第一种(exec)方式一 public static synchronized void runshell2() {    File superuser = n ...

  4. shell笔记

    shell:俗称操作系统的"外壳",就是命令解释程序.     是用户与Linux内核之间的接口.     是负责与用户交互,分析.执行用户输入的命令,并给出结果或出错提示.    ...

  5. shell笔记-local、export用法 、declare、set

    local一般用于局部变量声明,多在在函数内部使用.     1.    Shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到shell结束或被显示删除的地方为止.     2. ...

  6. shell笔记(基本知识)

    一.编写第一个shell程序 实例1: [程序] #!/bin/sh echo "hello word !" [运行]

  7. shell笔记-local、export用法

    local一般用于局部变量声明,多在在函数内部使用.    1.    Shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到shell结束或被显示删除的地方为止.    2.   ...

  8. 【转】Linux shell笔记

    由于工作的需要,越来越多的接触到linux系统.最近看了<Linux与Unix Shell>这本书,安装书的章节整理了一些自己认为比较重要的命令,方便以后查阅. No.001 文件安全与权 ...

  9. shell笔记-常用

    shell提取文件名: http://blog.csdn.net/u011544778/article/details/50773053 一.使用${} 1.${var##*/}该命令的作用是去掉变量 ...

随机推荐

  1. Python程序的混淆和加密

    混淆 为了增加代码阅读的难度, 源代码的混淆非常必要, 一个在线的Python代码混淆网站. 如果你觉得有用, 可以购买离线版本.同时需要注意的是, 这个混淆其实还是被很多人怀疑的, 因为即使混淆了, ...

  2. http://blogs.msdn.com/b/pranavwagh/archive/2007/03/03/word-2007-file-seems-to-be-deleted-when-you-open-and-save-it-using-dsoframer.aspx

    http://blogs.msdn.com/b/pranavwagh/archive/2007/03/03/word-2007-file-seems-to-be-deleted-when-you-op ...

  3. vim之pydiction插件

    [vim之pydiction插件] It consists of three main files: python_pydiction.vim -- Vim plugin. complete-dict ...

  4. LC并联谐振回路

  5. AutoCAD DxfCode组码值类型

    0-9 字符串(随着从 AutoCAD 2000 起引入了扩展符号名称,字数限制已由 255 个字符扩大到 2049 个单字节字符,不包括行末的换行符) 10-39 双精度三维点值 40-59 双精度 ...

  6. Cisco 防止SYN Flood 攻击原理

    DoS(Denial of Service拒绝服务)和DDoS(Distributed Denial of Service分布式拒绝服务)攻击是大型网站和网络服务器的安全威胁之一.2000年2月,Ya ...

  7. 一键安装GitLab7

    1. Install and configure the necessary dependencies If you install Postfix to send email please sele ...

  8. tryparse的用法,^0*[1-9]\d*$

    Entry entry = new Entry(); Int32 iParam; if(Int32.TryParse(entry.ajh,out iParam)) { /*如果转换成功就输出iPara ...

  9. UVaLive 6809 Spokes Wheel (模拟)

    题意:给定两个16进制数,问你把它转成二进制后,把第一个向左或者向右旋转最少的次数同,使得第一个变成第二个. 析:也是比较水的,按照要求做就好,注意0的情况,可能会忘记. #pragma commen ...

  10. magiczoom 插件去版本(放大镜效果)

    在放大镜效果中代码中有 Please upgrade to full version of Magic Zoom Plus™ 去除办法: 在 magiczoom 去版本 magiczoomplus.j ...