小试牛刀
打印printf、echo
[root@localhost ~]# printf "%s\n" printsth //不自带\n
printsth
[root@localhost ~]# x="printf"
[root@localhost ~]# printf "%s" x
x[root@localhost ~]# printf "%s" $x
printf[root@localhost ~]# printf "%s\n" $x
printf
//转义换行符
[root@localhost ~]# echo 1 2 3
1 2 3
[root@localhost ~]# echo -e "1\t2\n3"
1 2
3
//彩色文本
//重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37
[root@localhost ~]# echo -e "\e[1;31m This is red text \e[0m"
This is red text //这是红色= =
//彩色背景
//重置=0,黑色=40,红色=41,绿色=42,黄色=43,蓝色=44,洋红=45,青色=46,白色=47
[root@localhost ~]# echo -e "\e[1;42m Green backgroud\e[0m"
Green backgroud //这是绿色= =
变量
//查看环境变量
[root@localhost ~]# env
XDG_SESSION_ID=1
HOSTNAME=localhost.localdomain
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
……省略……
//查看pid
[root@localhost ~]# python &
[1]+ Stopped python
[root@localhost ~]# pgrep python
7657
//查看其他进程的环境变量
[root@localhost ~]# cat /proc/$PID/environ
//一些特殊环境变量
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# echo $UID
0
[root@localhost ~]# echo $PWD
/root
[root@localhost ~]# echo $HOME
/root
[root@localhost ~]# echo $SHELL
/bin/bash
//获取变量长度
[root@localhost ~]# echo ${#PATH}
59 //字符串所包含的字符数
[root@localhost ~]# x=12345
[root@localhost ~]# echo ${#x}
5
//变量运算
[root@localhost ~]# x=2
[root@localhost ~]# let x++ //let
[root@localhost ~]# echo $x
3
[root@localhost ~]# x=$[ x+1 ] //[ ]
[root@localhost ~]# echo $x
4
[root@localhost ~]# x=$((x+1)) //$(( ))
[root@localhost ~]# echo $x
5
[root@localhost ~]# echo "4 * 0.31" | bc //小数计算
1.24
[root@localhost ~]# echo "4 * 0.3231" | bc
1.2924
[root@localhost ~]# x=1234 //进制转换
[root@localhost ~]# echo "obase=2;$x" | bc //目标进制为二进制
10011010010
[root@localhost ~]# x=10011010010
[root@localhost ~]# echo "obase=10;ibase=2;$x" | bc //目标进制为十进制,原进制为二进制
1234
重定向
tee/pee用法
https://blog.csdn.net/qq_42564846/article/details/82957735
数组
[root@localhost bash]# array_var=(test1 test2 test3) //定义
[root@localhost bash]# echo ${array_var[*]} //打印
test1 test2 test3
[root@localhost bash]# echo ${array_var[@]} //与上条命令类似
test1 test2 test3
[root@localhost bash]# echo ${#array_var[*]} //打印长度
3
//关联数组
[root@localhost bash]# declare -A ass_array //定义为关联数组
[root@localhost bash]# ass_array=([index1]=val1 [index2]=vla2)//赋值
[root@localhost bash]# echo ${ass_array[*]} //获取所有索引内容
val1 vla2
[root@localhost bash]# echo ${!ass_array[*]} //获取所有索引
index1 index2
date
[root@localhost ~]# date "+%Y %B %d" //“+”表示以格式输出
2019 November 03
[root@localhost ~]# date "+%Y %m %d"
2019 11 03
[root@localhost ~]# date "+%y %m %d"
19 11 03
函数
#!/bin/bash
sum() {
#函数作用是把第一个和第二个参数加起来,返回和
echo $(($1+$2)) #这里是echo,return返回的是执行结果返回值
}
x=$( sum 1 2 )
#printf "%s\n" $x #printf和echo都可以
echo $x
read
[root@localhost bash]# read -n 2 var #-n指定接收n个字符
sh[root@localhost bash]# echo $var
sh
[root@localhost bash]# read -s pass #-s无回显读取
[root@localhost bash]# echo $pass
asdfghjkl
[root@localhost bash]# read -p "input sth:" str #-p指定提示信息
input sth:123
[root@localhost bash]# echo $str
123
[root@localhost bash]# read -t 5 var #-t指定超时时间
[root@localhost bash]# read -t 5 var
123
[root@localhost bash]# echo $var
123
[root@localhost bash]# read -d "+" var #-d指定读取结束定界符
r3oifanfkdak+[root@localhost bash]# echo $var
r3oifanfkdak
迭代器
#!/bin/bash
oldIFS=$IFS #原来的IFS为空格,先存起来
IFS=: #新的IFS为:
data="$(head -1 /etc/passwd)" #获取/etc/passwd文件的数据
for item in $data;
do
echo "$item"
done
#!/bin/bash
oldIFS=$IFS
IFS=:
data="$(head -1 /etc/passwd)"
count=0
for item in $data
do
#条件判断
[ $count -eq 0 ] && user=$item #第0个参数为用户
[ $count -eq 6 ] && shell=$item #第6个参数为shell
let count++
done;
IFS=$oldIFS
echo "$user's shell is $shell"
比较与测试
#!/bin/bash
[ $# -eq 0 ] && echo "got nothing." #参数数量为0
[ $# -eq 1 ] && echo "got one." #参数数量为1
#!/bin/bash
if [ $# -eq 0 ] #参数数量为0
then
echo "got nothing."
elif [ $# -eq 1 ] #参数数量为1
then
echo "got one."
else #其他情况
echo "got more than one."
fi
#算术比较
#-gt > -ge >=
#-lt < -le <=
#逻辑
#-a 与操作 -o 或操作
#文件测试
#[ -f $file_var ]:如果给定的变量包含正常的文件路径或文件名,则返回真。 #[ -x $var ]:如果给定的变量包含的文件可执行,则返回真。
#[ -d $var ]:如果给定的变量包含的是目录,则返回真。
#[ -e $var ]:如果给定的变量包含的文件存在,则返回真。
#[ -c $var ]:如果给定的变量包含的是一个字符设备文件的路径,则返回真。
#[ -b $var ]:如果给定的变量包含的是一个块设备文件的路径,则返回真。
#[ -w $var ]:如果给定的变量包含的文件可写,则返回真。
#[ -r $var ]:如果给定的变量包含的文件可读,则返回真。
#[ -L $var ]:如果给定的变量包含的是一个符号链接,则返回真
~/.bashrc, ~/.bash_file这两个看到~这个符合,应该明白,这是宿主目录下的,即里面的环境变量也叫shell变量,是局部的,只对特定的shell有效,修改过别忘了source
是一个块设备文件的路径,则返回真。
#[ -w $var ]:如果给定的变量包含的文件可写,则返回真。
#[ -r $var ]:如果给定的变量包含的文件可读,则返回真。
#[ -L $var ]:如果给定的变量包含的是一个符号链接,则返回真
~/.bashrc, ~/.bash_file这两个看到~这个符合,应该明白,这是宿主目录下的,即里面的环境变量也叫shell变量,是局部的,只对特定的shell有效,修改过别忘了source
/etc/profile , /etc/profile.d,前面的是文件,后面一看也就明白.d表示目录, /etc/profile里面的变量是全局的,对所有用户的shell有效。