笔记记录于《鸟哥的Linux私房菜-第三版》,以备多看。
bash
type
- -t #查看指令类型
- -a #显示PATH中所有指令
env
- 查看当前环境变量
export
- 将自定义变量导入当前环境(子程序)
declare
- declare -i num=$RANDOM*10/32768 #选取0-9随机数
- -x variable #将变量导入环境变量
- -r variable #只读变量
- +x variable #取消导入到环境变量(除 a,r 不会取消)
ulimit
-a 显示配额
read
-p “提示信息” variable
-t 30 variable #限定时间
删除
echo ${PATH#/*:} #从左向右删最短
echo ${PATH##/*:} #从左向右删最长
echo ${PATH%/*bin} #从右向左删最短
echo ${PATH%%/*bin} #从右向左删最长
替换
echo ${PATH/sbin/SBIN} #从左到右替换第一个匹配
echo ${PATH//sbin/SBIN} #从左到右替换全部匹配
初始化
new_var=${old_var-default_var} #old_var未赋值则赋值为default_var
new_var=${old_var:-default_var} #old_var 未赋值或赋值为空字符串 则赋值为default_var
new_var=${old_var=default_var} #效果同上,只是old_var也会被修改
new_var=${old_var:=default_var} #效果同上,只是old_var也会被修改
alias&unalias
history
!num #第几条历史操作
!! #上一条操作
!cmd #最近一条cmd开头操作
PS1
PS1=’[\u@\h \t \W]$ ‘ #用户状态
登陆
/etc/issue #进站信息
/etc/motd #欢迎信息
/etc/profile #系统配置
~/.bash_profile | ~/.bash_login | ~/.profile #个人配置
最终操作的文件是 ~/.bashrc ,所以个人设置可以放里边
source
source ~/.bashrc #读取配置当前环境
. ~/.bashrc #同上
grep
cat file | grep -n -A2 -B3 ‘str’ #连搜索结果的前3行和后2行一起显示出来
cat file | grep -vn ‘str’ #反向搜索
cat file | grep -in ‘str’ #不分大小写
cat file | grep -n ‘[^[:lower:]]ar’ #非小写字母+ar; [:lower:]同[a-z]
grep -l ‘*‘ $(find /etc/ -type f) #查找/etc下包含*的文件
find /etc/ -type f|xargs -n 10 grep ‘*‘ #改良版,每次处理十个文件查找
egrep
egrep -v ‘^$|^#’ file #列出非注释与非空白行
sed
cat -n file|sed ‘2,5d’ #删除2-5行
cat -n file|sed ‘2a 添加到第2行后’ #行后添加
cat -n file|sed ‘2i 添加到第2行前再加一行’ # 行前添加
sed -n ‘2 w output.txt’ file #将内容 写入 output.txt
cat -n file|sed ‘2,5c 替换文字’ # 替换
sed -n ‘2,5p’ file #按行打印
cat -n t |sed -n ‘2~5p’ #按范围打印,第2行开始每隔5行
cat -n t |sed -n ‘/search/,+5p’ #匹配到search,再多打印5行
cat -n t |sed ‘s/搜索字符串/替换字符串/g’ #替换字符串
cat -n t |sed ‘/^$/d’ #删除空白行
sed -i ‘s/.$/!/g’ file #直接修改源文件,替换行尾的.为!
sed ‘s/^/ls -l /e’ files #替换并 执行
sed -i ‘$a 新增内容’ file #在文件末尾附加内容
sed -n -f sed-cmd-file file #执行文件中sed命令
cat file|sed -e ‘4d’ -e ‘6c replace 6th line’ #多条指令
sed ‘{
s/Google/Github/ s/Git/git/ }' file #同上
sed ‘s/^./<&>/‘ file # “<>”包裹行 *&**
sed ‘s/Paul|Addy/[&]/g’ file # |需转义,sed中正则需转义字符
echo “string”|sed ‘s/string/S\LTRING/‘ # \L将后边字符小写;\l将后边第一个字符小写
echo “string”|sed ‘s/string/\Ustring/‘ # \U将后边字符大写;\u将后边第一个字符大写
echo “string”|sed ‘s/string/\Us\Etring/‘ # \E能打断\L或者\U改变大小写
sed –in-place=bak ‘s/Ian/IAN/‘ source.txt # 边替换边备份
sed -ibak ‘s/Ian/IAN/‘ source.txtsed ‘y/AB/ab/‘ file # 转换字符
awk
last -5|awk '{print $1 "\t"
$3}’ #截取用户和ip格式化显示last -5|awk '{print $1 "\t" line:"NR" "\t" col:"NF"}'
#截取用户和ip格式化显示last -5|awk '{print $1 "\t line:"NR "\t col:"NF "\t delimiter:"FS}'
#内置变数cat /etc/passwd|awk 'BEGIN{FS=":"} $3<10 {print $1 "\t" $3}'
#预设分隔符,并取出UID<10的用户名cat pay.txt|awk 'NR==1{printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Total"};NR>=2{total=$2+$3+$4;printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,total}'
#计算总合,”;”可用 enter 替换cut
-d ‘分隔符’ -fN #默认tab分隔,N为第几列
diff
-b #只是空白不同不列出
cmp
-s #不同位置都列出来
patch
diff -Naur t t2 >t.patch #生成patch
patch -pN < file.patch #更新旧档案,N代表要去掉几个
"/"
patch -R -pN < file.patch #还原旧档案
shell script
test
test -z str
#判断字符串是否为空[ -z "$HOME" ];echo $?
#注意空格test -e filename && echo 'exist' || echo 'not exist'
#判断文件是否存在seq
seq start end #生成一个end-start的range数组
计算
$((cal_expr))
脚本相关变量
$0 #脚本名
$# #脚本参数个数
$@ #全部脚本参数,空格分隔
$1 #第一个参数
$$ #bash的PID
shift
shift N #偏移几个,参数从左到右拿掉几个
判断执行结果
ping -c 1 -w 1 192.168.1.1 &>/dev/null && result=0 || result=1
sh
sh -n file.sh #检查语法
sh -v file.sh #执行前吧内容输出
sh -v file.sh #将使用到的script内容输出
判断式
if
if ;then fi --- if ;then elif ;then fi --- if ;then else fi
case
case $var in "case1") ... ;; *) #default ... ;; esac
while
while [cond] do ... done
until
until [cond] do ... done
for
for v in $arrs do ... done --- for((i=1;i<$nu;i=i+1)) do ... done
如有疑问,请文末留言交流或邮件:newbvirgil@gmail.com 本文链接 : https://newbmiao.github.io/2015/09/15/Niaoge-Linux-Desktop-Guide-notes-bash.html