bash
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