@songying
2018-11-06T20:39:27.000000Z
字数 4745
阅读 1031
linux
echo "hello world!"
echo 'hello world!' #变量替换在单引号中无用
echo hello world #此时无法使用“;”,因为";"为命令界定符
echo -e "1\t2\t3" #-e 表接受双引号字符串内的转义序列作为参数
# zsh中不需要添加 -e
设置文字颜色
#\e[1;31m :将颜色设为红色,\e[0m:将颜色重新置回
echo -e "\e[1;31m This is red text \e[0m"
#重置=0, 黑色=30, 红色=31, 绿色=32,
#黄色=33, 蓝色=34, 洋红=35,青色=36, 白色=37
设置背景颜色
echo -e "\e[1;42m Green background \e[0m"
#重置=0, 黑色=40, 红色=41, 绿色=42,
#黄色=43, 蓝色=44, 洋红=45, 青色=46, 白色=47
#%-5s指明一个格式为左对齐且宽度为5的字符串替换。
printf "%-5s, %-10s %-4s\n" No Name Mark
注意 : 在prinf的每行后都要有一个换行符\n.
pgrep gedit #获取gedit这个进程的进程ID
#获取其运行时的环境变量,并将所有的\0换为\n
cat /proc/$PID/environ | tr '\0' '\n'
var="value" #注意没有空格
echo $var
echo ${var}
#PATH常定义在/etc/environment 或/etc/profile或 ~/.bashrc中。
export PATH="$PATH:/home/user/bin"
length=${#var} #获取变量值长度
echo $SHELL 或 echo $0
if [ $UID -ne 0 ]; then #root的UID是0
echo Not root user.please run as root.
else
echo Root user
fi
prepend()函数:首先检查该函数第二个参数所指定的目录是否存在,
若存在,eval表达式将第一个参数所指定的变量值设置为第二个参数值+":",随后再跟上首个参数的值
#在.bashrc中添加
prepend() { [ -d "$2" ] && eval $1=\"$2\$\{$1:+':'\$$1\}\" && export $1 ; }
# shell参数扩展:${parameter:+expression}:若parameter不为空,则使用expression的值。
prepend PATH /opt/myapp/bin
prepend LD_LIBRARY_PATH /opt/myapp/lib
no1=4; #赋值
#let变量名前不需要加$
let result=no1+no2
let no1++
let no+=6
result=$[ no1 + no2 ]
result=$[ $no1 + 5 ] #可加可不加$
result=$(( no1 + 50 ))
result=$(( $no1 + 50 ))
result=`expr 3 + 4` #此处并非是单引号
result=$(expr $no1 + 5)
result=`echo "$no * 1.5" | bc` # 此处并非是单引号
result=`echo "scale=2;3/8" | bc` #此处` `可换为$( )
#将十进制转换为二进制
result=$(echo "obase=2;$no" | bc)
#将人禁止转换为十进制
result=$(echo "obase=10;ibase=2;$no" | bc)
result=`echo "sqrt(100)" | bc` # 计算平方根
result=$(echo "10^10" | bc) #计算平方
> #将文本内容重定向到一个文件
>> #将文本追加到目标文件中
2> #将stderr重定向到一个文件
cmd 2> stderr.txt 1> stdout.txt #将stderr,stdout定向到不同文件
cmd &> output.txt #将stderr,stdout定向到同一文件
cmd 2> /dev/null #将stderr信息销毁
alias new_command='command sequence' # 创建别名,此处是单引号
注意: alias别名的作用是暂时的,一旦关闭终端,所有别名设置将消失。若想永久修改,可更改.basgrc配置文件。
#!/bin/bash
echo -e "Enter password: "
stty -echo # -echo禁止将输出发送到终端。
read password
stty echo
echo
echo password read.
bash -x script.sh # -x:打印出所执行的每一行命令以及当前状态
#/bin/bash
for i in {1..6};
do
set -x #在执行时显示参数与命令
echo $i
set +x #禁止调试
done
echo "Script executed"
#!/bin/bash
function DEBUG()
{
# ”:“表示告诉shell不要进行任何操作
[ "$_DEBUG" == "on" ] && $@ || :
}
for i in {1..10}
do
# 在给每一个需要打印调试信息的语句前面加上DEBUG。
DEBUG echo $i
done
运行: _DEBUG=on ./script.sh
function fname(){ #定义函数
//statement
}
fname ; #执行函数
fname arg1 arg2 ; #传递参数
$1: 第一个参数
$2: 第二个参数
$n: 第n个参数
$@: 扩展为"$1", "$2", "$3"
$*: 扩展为"$1$2$3"
function1() {
echo $1;
function1 hello;
sleep 1;
}
#函数作用域可扩展到子进程中
export -f function_name
command;
echo $?; # $?是上一个命令的返回值,成功=0, 不成功=非0.
#!/bin/bash
#command 中写入你要检测退出状态的目标命令
CMD="command"
$CMD
if [ $? -eq 0 ]
then
echo "$CMD executed successfully"
else
echo "$CMD terminated unsuccessfully"
fi
ls | cat -n > out.txt
#子shell
cmd_output=$(ls | cat -n)
echo $cmd_output
#反引用,此处不是单引号
cmd_output=`ls | cat -n`
echo $cmd_output
pwd;
(cd /bin; ls); # ()来定义一个子shell
pwd;
注意: 当命令在子shell中执行时,不会对当前shell有任何影响,所有的改变仅限于子shell内部。
# 通过将子shell放入到双引号中可保留空格和换行符。
output="$(cat text.txt)"
#从标准输入中读取3个字符送入到var_name这个变量中。
read -n 3 var_name
# 从标准输入中读取数据,但是不显示输入的数据,可用来读取密码
read -s var_name
# 显示提示信息,并将输入的数据吸入到变量中
read -p "Enter input:" var
#在十秒内将输入写到变量中
read -t 10 var
# 输入中一旦遇到:就停止输入,并将输入写入变量中。
read -d ":" var
#该命令每30秒运行一次。
repeat(){
while :; do $@ && return; sleep 30; done
}
repeat wegt -c ......
IFS是存储定界符的环境变量,是shell环境中使用的默认定界符。其默认值时空白字符,包括:换行符,制表符, 空格。
data="name,sex,rollno,location"
oldIFS=IFS
IFS=, #将定界符设置为逗号
for item in $data;
do
echo Item: $item
done
IFS=oldIFS
#!/bin/bash
line="root:x:0:0:root:/root:/bin/bash"
oldIFS=$IFS;
IFS=":"
count=0
for item in $line;
do
[ $count -eq 0 ] && user=$item;
[ $count -eq 6 ] && shell=$item;
let count++
done
IFS=$oldIFS
echo "$user\'s shell is $shell;"
# list可以是一个字符串,也可以时一个序列,注意此处的condition有逗号结尾
for var in list;
do
comands;
done
# 序列: {1..50}, {a..z}, {A..Z}
# true,可实现无限循环,注意此处的condition有逗号结尾
while condition;
do
commands;
done
# 注意此处的condition有逗号结尾.
until [ $x -eq 9];
do
let x++;
echo $x;
done
if condition;
then
commands;
else
commands;
fi
[ condition ] && action; #若condition为真,则执行action
[ condition ] || action; #若condition为假,则执行action
注意: 一定在[ 或 ] 与操作数之间有一个空格
[ var -eq 0 ] # 当 $var等于0时,返回真。
[ var -eq 0 ] # 当 $var不为0时,返回假
-gt :大于
-lt :小于
-ge :大于或等于
-le :小于或等于
[ $var1 -ne 0 -a $var2 -gt 2 ] #逻辑与-a,而不可用&&与&
[ $var1 -ne 0 -o $var2 -gt 2 ] #逻辑或 -o,而不可用|| 与 |
[ -f $var ] #若变量包含正常的文件路径或文件名,返回真
[ -x $var ] #变量包含的文件可执行,返回真
[ -d $var ] #变量包含的是目录,返回真
[ -w $var ] #变量包含的文件可写,返回真
[ -r $var ] #变量包含的文件可读, 返回真
[ -L $var ] #变量包含的是一个符号链接,返回真
[ -e $var ] #变量包含的文件存在,返回真。
[ -c $var ] #变量包含的是一个字符设备文件路径,返回真
[ -b $var ] #变量包含的是一个块设备文件路径,返回真