linux_shell脚本攻略第一章笔记

小试牛刀

打印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有效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值