bash一些基础的内置命令
echo
eval
exec
export
read
shift
echo命令
-n 不换行输出
-e 解析字符串中的特殊符号
\n 换行
\r 回车
\t 制表符
\b 退格
ubuntu@VM-12-16-ubuntu:~/shell_program$ echo 你好啊;echo 我很帅
你好啊
我很帅
#不换行打印
ubuntu@VM-12-16-ubuntu:~/shell_program$ echo -n 你好啊;echo 我很帅
你好啊我很帅
ubuntu@VM-12-16-ubuntu:~/shell_program$ echo -n 你好啊;echo -n 我很帅
你好啊我很帅ubuntu@VM-12-16-ubuntu:~/shell_program$
#-e解析特殊字符
ubuntu@VM-12-16-ubuntu:~/shell_program$ echo "我看你\n很帅"
我看你\n很帅
ubuntu@VM-12-16-ubuntu:~/shell_program$ echo -e "我看你\n很帅"
我看你
很帅
#打印命令 printf
ubuntu@VM-12-16-ubuntu:~/shell_program$ printf "你好\t我是\t吴彦祖"
你好 我是 吴彦祖ubuntu@VM-12-16-ubuntu:~/shell_program$ printf "你好\t我是\t吴彦祖\n"
你好 我是 吴彦祖
# printf,echo同是输出命令
# printf 格式化字符串 ,不默认换行,需要手动添加。%-10s %-4.2f 指定宽度
# echo 输出字符串 ,默认换行。注意使用转义字符需要开启,否则原样输出
eval
执行多个命令
ubuntu@VM-12-16-ubuntu:~/shell_program$ eval ls;cd /tmp/
different.sh forks forks.c hello.py hello.sh special_symbol.sh special_var.sh
ubuntu@VM-12-16-ubuntu:/tmp$
exec
不创建子进程,执行后续命令,且执行完毕后,自动exit
#执行完date命令后,自动exit,即退出当前shell,Connection
ubuntu@VM-12-16-ubuntu:~/shell_program$ exec date
Mon May 9 23:01:43 CST 2022
Connection closed.
shell子串的用法
name="god_frey"
${变量} 返回变量值
${#变量} 返回变量长度,字符长度
${变量:start} 返回变量start数值之后的字符,且包含start的数字
${变量:start:length} 提前start之后的length限制的字符,例如${name:4:1}
${变量#word} 从变量开头删除最短匹配的word子串
${变量##word} 从变量开头删除最长匹配的word
${变量%word} 从变量结尾删除最短word
${变量%%word} 从变量结尾开始删除最长匹配的word
# 替换
${变量/pattern/string} 用string代替第一个匹配的pattern
${变量//pattern/string} 用string代替所有的pattern
子串的实际案例
ubuntu@VM-12-16-ubuntu:~$ unset name #删除变量
ubuntu@VM-12-16-ubuntu:~$ name="god_frey180" #定义变量
ubuntu@VM-12-16-ubuntu:~$ echo $name
god_frey180
ubuntu@VM-12-16-ubuntu:~$ echo ${name} #返回变量值
god_frey180
ubuntu@VM-12-16-ubuntu:~$ echo ${#name} #返回变量长度
11
#截取子串
ubuntu@VM-12-16-ubuntu:~$ echo ${name:3} #截取第三个字符之后的子串
_frey180
ubuntu@VM-12-16-ubuntu:~$ echo ${name:5}
rey180
#设置起点,以及元素长度
ubuntu@VM-12-16-ubuntu:~$ echo ${name:2:4} #截取第2个之后的4个字符的子串
d_fr
计算变量长度的方法
ubuntu@VM-12-16-ubuntu:~$ echo $name
god_frey180
ubuntu@VM-12-16-ubuntu:~$ echo $name | wc -l
1
ubuntu@VM-12-16-ubuntu:~$ echo $name | wc -L
11
# wc命令参数用法
ubuntu@VM-12-16-ubuntu:~/shell_program$ cat test_1.test |wc -l #统计文件行数
3
ubuntu@VM-12-16-ubuntu:~/shell_program$ cat test_1.test |wc -L #统计文件最长一行的长度
9
ubuntu@VM-12-16-ubuntu:~/shell_program$ cat test_1.test
1234
1234567
123456677
# 利用数值计算expr命令
ubuntu@VM-12-16-ubuntu:~/shell_program$ expr length "${name}"
11
# awk统计长度,length函数
ubuntu@VM-12-16-ubuntu:~/shell_program$ echo "${name}" | awk '{print length($0)}'
11
# 最快的统计方式
ubuntu@VM-12-16-ubuntu:~/shell_program$ echo ${#name}
11
字符串长度统计方法速度比较
time命令,统计命令执行时长
for循环
语法:
for 变量 in 序列1~100
for number in {1..100}
do
echo $number
done
ubuntu@VM-12-16-ubuntu:~/shell_program$ for num in {1..3};do echo $num;done
1
2
3
# seq命令,产生序列,默认空格分离
ubuntu@VM-12-16-ubuntu:~/shell_program$ seq 4
1
2
3
4
# seq -s ":" 指定使用冒号分隔
ubuntu@VM-12-16-ubuntu:~/shell_program$ seq -s ":" 4
1:2:3:4
# 产生一个1-10的序列,循环三次,使用:分隔,反引号``引用执行结果,等同$()
ubuntu@VM-12-16-ubuntu:~/shell_program$ for n in {1..3};do str1=`seq -s ":" 10`;echo $str1;done
1:2:3:4:5:6:7:8:9:10
1:2:3:4:5:6:7:8:9:10
1:2:3:4:5:6:7:8:9:10
# 结合time命令 ${#变量} 计算时间
ubuntu@VM$-12-16-ubuntu:~/shell_program$ time for n in {1..10000};do char=`seq -s "god_frey" 100`;echo $ ${#char} &>/dev/null;done
real 0m9.533s #实际运行时间
user 0m7.249s #用户态执行时间
sys 0m2.862s #内核态执行时间
[2379]+ Done echo $ ${#char}
# 使用wc -L命令计算
ubuntu@VM-12-16-ubuntu:~/shell_program$ time for n in {1..10000};do char=`seq -s "god_frey" 100`;echo $ ${char} |wc -L &>/dev/null;done
real 0m21.848s
user 0m17.954s
sys 0m6.988s
# 使用expr的length命令计算
ubuntu@VM-12-16-ubuntu:~/shell_program$ time for n in {1..10000};do char=`seq -s "god_frey" 100`;expr length "${char}" &>/dev/null;done
real 0m17.094s
user 0m12.871s
sys 0m5.040s
# 使用awk的计算
ubuntu@VM-12-16-ubuntu:~/shell_program$ time for n in {1..10000};do char=`seq -s "god_frey" 100`;echo $ ${char} |awk '{print length($0)}' &>/dev/null;done
real 0m26.996s
user 0m21.144s
sys 0m8.780s
shell编程,尽量使用Linux内置的命令,内置的操作和内置的函数,效率最高C语言开发效率最高,尽可能的减少管道符操作
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。