Basic moves

Ctrl+b    #Move back one character.
Ctrl+f    #Move forward one character
Ctrl+d    #Delete current character
Ctrl+-    #Undo

Ctrl+a    #Move to the start of line
Ctrl+e    #Move to the end of line
Meta+f    #Move forward a word
Meta+b    #Move backward a word
Ctrl+l    #Clear the screen

Cut and paste

Ctrl+k    #Cut from cursor to the end of line.
Meta+d    #Cut from cursor to the end of word.
Meta+Backspace    #Cut from cursor to the start of word.
Ctrl+w    #Cut from cursor to previous whitespace.
Ctrl+y    #Paste the last cut text.
Meta+y    #Loop through and paste previously cut text.
Meta+.    #Loop through and paste the last argument of previous commands.

Ctrl+r    #Search as you type

脚本shell

脚本解释器

#!/bin/sh

循环

for ((i=0; i<10; i++)); do
	touch test_$i.txt
done

for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done

int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done

变量

your_name="qinjx"
echo $your_name
echo ${your_name}

# 删除变量
unset variable_name

# 获取字符串长度
string="abcd"
echo ${#string} #输出 4

# 数组(注意间隔是空格)
array_name=(value0 value1 value2 value3)

# 下标定义数组
array_name[0]=value0
array_name[1]=value1

# 读取数组
valuen=${array_name[n]}

# 获取所有元素
echo ${array_name[@]}

# 取得数组元素的个数
length=${#array_name[@]}

关系运算符

# 检测两个数是否相等,相等返回 true。
-eq

# 检测左边的数是否大于右边的,如果是,则返回 true
-gt

# 检测左边的数是否小于右边的,如果是,则返回 true
-lt

流程判断

if condition
then
    command1 
    command2
    ...
    commandN 
fi

if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi

# test命令
num1=100
num2=100
if test $[num1] -eq $[num2]
then
    echo '两个数相等!'
else
    echo '两个数不相等!'
fi

# 检查文件是否存在
cd /bin
if test -e ./bash
then
    echo '文件已存在!'
else
    echo '文件不存在!'
fi

函数

funWithParam(){
    echo "第一个参数为 $1 !"
    echo "第二个参数为 $2 !"
    echo "第十个参数为 $10 !"
    echo "第十个参数为 ${10} !"
    echo "第十一个参数为 ${11} !"
    echo "参数总数有 $# 个!"
    echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73 

grep

# 查找文件中含有xxx的一行
grep xxx filename

#查找前缀有“test”的文件包含“test”字符串的文件
grep test test*   

#以递归的方式查找'etc/acpi'下包含'update'的文件  
grep -r update /etc/acpi 

# 反向查找,查找文件名中包含 test 的文件中不包含test 的行
grep -v test *test*

# 只显示匹配PATTERN部分
grep -o 'name="[^"]\+"' your_file

#name="test"
#name="testa"
#name="1test2"
#name="testb"

xargs

# 输出文件名前缀是predict的文件
ls |grep 'predict*' | xargs echo

# -n 定义多行输出
cat test.txt|xargs -n3

# -d 自定义一个定界符
echo "nameXnameX"|xargs -dX

# 读取stdin,将格式化后的参数传递给命令
# 复制所有图片文件到/data/images 目录下
ls *.jpg | xargs -n1 -I cp {} /data/images

等待

# 等待10s
sleep 10

停止

# 脚本停止
#!/bin/sh
some command
exit 0